java8_方法引用、构造器引用、数组引用

方法引用

  • 若Lambda 体中的内容有方法已经实现了,我们可以使用“方法引用”(可以理解为方法引用是Lambda)表达式的另一种表现形式。
  • 主要有三种语法格式
    • 对象 :: 实例方法名
    • 类 :: 静态方法名
    • 类 :: 实例方法名
  • 注意
    • Lambda 体中调用方法的参数列表与返回值类型,要与函数式接口抽象方法的该函数列表和返回值类型保持一致。
    • 若Lambda参数列表中的第一个参数是实例方法的调用者,而第二个参数是实例方法的参数时。可以使用 ClassName :: method
  • 对象 :: 实例方法名
@Test
public void test() {
        Consumer<String> consumer1 = (x) -> System.out.println(x);
        consumer1.accept("hello");
        Consumer<String> consumer2 = System.out::println;
        consumer2.accept("world");
}
  • 类 :: 静态方法名
@Test
public void test() {
        Comparator<Integer> com1 = (x,y)->Integer.compare(x,y);
        Comparator<Integer> com2 = Integer::compare;
}
  • 类 :: 实例方法名
@Test
public void test() {
        BiPredicate<String,String> bp1 = (x,y) -> x.equals(y);
        BiPredicate<String,String> bp2 = String::equals;
}

构造器引用

  • 格式:ClassName::new
  • 注意:需要调用的构造器的参数列表要与hans
@Test
public void test09() {
        Supplier<String> sup1 = () -> new String();
        Supplier<String> sup2 = String :: new;
}

数组引用

  • 格式:Type []::new
@Test
public void test10() {
        Function<Integer,String[]> fun1 = (x) -> new String[x];
        Function<Integer,String[]> fun2 = String[]::new;
}

后学末进,才疏学浅,如有疏误,还望不吝赐教。

posted @ 2017-10-18 15:38  ifreeky  阅读(808)  评论(0编辑  收藏  举报