Java8新特性--方法引用、构造器引用

方法引用

简介

方法引用就是Lambda 表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法。当要传递给 Lambda 体的操作,已经有实现的方法了,可以使用方法引用。

方法引用格式

1.对象 :: 实例方法名

2.类 :: 静态方法名

3.类 :: 实例方法名

方法引用使用前提

总体要求:Lambda 体只有一句语句,并且是通过调用一个对象的/类现有的方法来完成的

引用格式1要求:函数式接口中的抽象方法由类的实例方法实现,且两个方法的参数和返回值相同

引用格式2要求:函数式接口中的抽象方法由类的静态方法实现,且两个方法的参数和返回值相同

引用格式3要求:函数式接口中的抽象方法由类的实例方法实现,抽象方法与实例方法返回值相同,抽象方法的参数比实例方法多一个,且抽象方法的第一个参数是实例方法的调用者

代码示例

引用格式1

@Test
public void test1(){
    Consumer<String> consumer1 = s -> System.out.println(s);
    consumer1.accept("hello world");

    Consumer<String> consumer2 = System.out::println;
    consumer1.accept("hello world");
}

引用格式2

@Test
public void test2(){
    Function<Double,Long> function1  = num -> Math.round(num);
    System.out.println(function1.apply(3.14));

    Function<Double,Long> function2 = Math::round;
    System.out.println(function2.apply(6.28));
}

引用格式3

@Test
public void test3(){
    Function<String,Integer> function1 = str -> str.length();
    System.out.println(function1.apply("hello world"));

    Function<String,Integer> function2 = String::length;
    System.out.println(function2.apply("hello world"));

}

构造器引用

简介

当 Lambda 表达式是创建一个对象,并且满足 Lambda 表达式形参,正好是给创建这个对象的构造器的实参列表,就可以使用构造器引用。

引用格式

类::new

代码示例

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Person {
    private String name;
    private Integer age;

    public Person(String name) {
        this.name = name;
    }
}
@Test
public void test4(){

    Supplier<Person> supplier = Person::new;
    System.out.println(supplier.get());

    Function<String,Person> function = Person::new;
    System.out.println(function.apply("www"));

    BiFunction<String,Integer,Person> biFunction = Person::new;
    System.out.println(biFunction.apply("www", 18));

}

根据参数的不同,选择不同的构造器

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天不coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值