java 双冒号 静态方法_Java8学习笔记(五)—— 方法引用(::双冒号操作符)

一、什么是方法引用?

简单来说就是一个Lambda表达式,方法引用提供了一种引用而不执行方法的方式,运行时,方法引用会创建一个函数式接口的实例。

如下所示:

@Test

public void example1(){

//使用Lambda表达式

Consumer consumer1 = x -> System.out.println(x);

consumer1.accept("Lambda表达式");

//使用方法引用

Consumer consumer2 = System.out::println;

consumer2.accept("方法引用::");

}

二、方法引用的五种方式

① 引用对象的实例方法 对象::实例方法名

② 引用类的静态方法 类::静态方法名

③ 引用类的实例方法 类::实例方法名

④ 引用构造方法 类::new

⑤ 数组引用 类型::new

使用示例如下:

/**

* 引用类

*/

class Human{

private String name;

private int age;

public Human(){ }

public Human(String name, int age) {

this.name = name;

this.age = age;

}

public static String getNationality(){

return "中国";

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

/**

* 引用对象的实例方法

*/

@Test

public void example3(){

Human human = new Human("小白",20);

//使用Lambda表达式

Supplier supplier1 = () -> human.getName();

System.out.println(supplier1.get());

//使用方法引用

Supplier supplier2 = human::getName;

System.out.println(supplier2.get());

}

/**

* 引用类的静态方法

*/

@Test

public void example4(){

//使用Lambda表达式

Supplier supplier1 = () -> Human.getNationality();

System.out.println(supplier1.get());

//使用方法引用

Supplier supplier2 = Human::getNationality;

System.out.println(supplier2.get());

}

/**

* 引用类的实例方法名

*/

@Test

public void example5(){

Human human = new Human("小白",20);

//使用Lambda表达式

Function function1 = p -> p.getName();

System.out.println(function1.apply(human));

//使用方法引用

Function function2 = Human::getName;

System.out.println(function2.apply(human));

}

/**

* 引用构造方法

*/

@Test

public void example6(){

//使用Lambda表达式

Supplier supplier1 = () -> new Human();

System.out.println(supplier1.get() instanceof Human); //true

//使用方法引用

Supplier supplier2 = Human::new;

System.out.println(supplier2.get() instanceof Human); //true

}

/**

* 引用数组

*/

@Test

public void example7(){

//使用Lambda表达式

Function function1 = x -> new String[]{x.toString()};

System.out.println(function1.apply(10) instanceof String[]); //true

//使用方法引用

Function function2 = String[]::new;

System.out.println(function2.apply(10) instanceof String[]); //true

}

————————————————

版权声明:本文为CSDN博主「_云卷云舒_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Alexshi5/java/article/details/95771900

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值