方法引用

方法引用

方法引用

三种语法格式:

  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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115172.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号