首页 > 其他 > 详细

方法引用

时间:2021-09-02 04:22:02      阅读:10      评论:0      收藏:0      [点我收藏+]

方法引用

三种语法格式:

  1. 对象::实例方法名
  2. 类::静态方法名
  3. 类::实例方法名

注意:是要实现的方法和接口的抽象方法的返回值和参数列表必须相同

1.对象::实例方法名

@Test
public void test(){
    //lambda表达式
    Consumer<Integer> consumer = (x)-> System.out.println(x);
    //方法引用 写法
    Consumer<Integer> consumer2 = System.out::println;
    consumer2.accept(10);
}

2.类名::实例方法名

注意:如果函数接口的参数列表为两个,第一个参数为实例方法的调用者,第二个参数为实例方法的实参,则可以使用该方法引用

如x.equals(y)

@Test
public void test1(){
    BiPredicate<String ,String> flag = (x,y)->x.equals(y);
    //等价于
    BiPredicate<String ,String> flag2 = String::equals;
    boolean test = flag2.test("345", "345");
    System.out.println(test);
}

3.类名::静态方法名

注意:构造器的选择取决于接口的方法参数列表,

如Supplier对应的supplier.get()方法就是没有参数,因此就是调用无参构造。

/*
*构造器引用
*/
@Test
public void test2(){
    Supplier<TestClass> supplier = ()->new TestClass();
    //等价于
    Supplier<TestClass> supplier1 = TestClass::new;
}
class TestClass{
    private int num;
    public TestClass() {
    }
}

/**
 * 数组的引用
 */
    @Test
public void test3(){
    Function<Integer,String[]> function = (Integer)->new String[Integer];
    //等价于
    Function<Integer,String[]> function2 = String[]::new;
    String[] strings = function2.apply(10);
    System.out.println(strings.length);
}

方法引用

原文:https://www.cnblogs.com/Gao-yubo/p/15212819.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!