java8 方法引用

方法引用  

我们先定义一个接口 (@FunctionalInterface  函数式接口:接口中只定义一个方法的接口称之为函数是接口)

@FunctionalInterface
public interface InterfaceLamdaFunction3 {
    void print(Integer t);
}

lambda表达式实现该接口


public class TestMain {

    @Test
    public void a() {
        InterfaceLamdaFunction3 interfaceLamdaFunction3 = (x) -> System.out.println(x);
    }

    public static  void  print(Integer t){
        System.out.println(t);
    }

}

方法引用实现

public class TestMain {

    @Test
    public void a() {
        InterfaceLamdaFunction3 interfaceLamdaFunction3 = TestMain::print;
    }

    public static  void  print(Integer t){
        System.out.println(t);
    }

}

方法引用实现 

InterfaceLamdaFunction3 interfaceLamdaFunction3 = TestMain::print;

这行代码是我们 引用了 TestMain中 print 实现了 InterfaceLamdaFunction3接口中的print ;

方法引用要求 引用的方法 要和接口中的方法参数返回值相同。

 

方法引用


public class TestMain {

    @Test
    public void a() {
        //静态引用
        InterfaceLamdaFunction3 interfaceLamdaFunction3 = TestMain::print;
    }
    @Test
    public void b() {
        //实例对象引用
        TestMain t=new TestMain();
        InterfaceLamdaFunction3 interfaceLamdaFunction3 = t::print2;
    }

    @Test
    public void c() {
        //构造方法引用
        Supplier<TestMain> supp=TestMain::new;
    }
    public static  void  print(Integer t){
        System.out.println(t);
    }
    public  void  print2(Integer t){
        System.out.println(t);

    }

}

 

 

 

Java 8 引入了方法引用(Method Reference),它是 Lambda 表达式的一种简化形式。通过方法引用,我们可以直接引用已有的类或实例方法,而无需再显式地书写完整的 lambda 表达式。 ### 方法引用的基本语法 方法引用主要有以下四种形式: #### 1. **静态方法引用** 格式为 `类名::静态方法`。 - 示例: ```java Arrays.sort(array, String::compareToIgnoreCase); ``` #### 2. **特定对象的实例方法引用** 如果某个对象已经存在,并需要引用它的方法,则可以使用 `对象::实例方法` 的格式。 - 示例: ```java Consumer<String> consumer = System.out::println; consumer.accept("Hello World"); ``` #### 3. **任意类型实例方法引用** 当我们需要对某类型的任意对象应用其实例方法时,可以用这种模式——即 `类型::实例方法` 形式。 - 示例: ```java Function<String, Integer> function = Integer::parseInt; // 将String转成Integer int num = function.apply("123"); // 结果为123 ``` #### 4. **构造函数引用** 可用于创建新对象的场景中,其格式类似于其他方法引用的形式 `Class::new`。 - 示例: ```java Supplier<Date> supplier = Date::new; // 创建一个新的Date对象 Date date = supplier.get(); ``` ### 使用场景及优点 - 简化代码:当lambda表达式的主体仅是对现有方法的一次简单调用时,可以直接改用更简洁的方法引用表示法; - 提高可读性:对于熟悉的标准库功能来说,使用名字代替匿名内部类会使得意图更加清晰直观; 总之,在适当的地方利用好方法引用可以使程序变得既紧凑又易于理解!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值