java构造器特性_java8新特性之方法引用与构造器引用

方法引用与构造器引用

关于lambda表达式,我们已经知道了,一般是有两部分组成。箭头操作符(->)左侧是lambda体的参数列表,右侧是lambda体,而lambda体里面的操作,有些情况下可以有另一种写法,更加简短。

可以理解这种写法是lambda表达式的另外一种表现形式,这种写法我们大致可以分为三类,方法引用、构造器引用、数组引用,一般语法格式为X::Y,下面分别看一下。

方法引用

1.对象::实例方法名

/***

* 方法引用1

*/

@Test

public void test01() {

String msg = "hello lambda!";

// lambda体中的功能已经有方法完成 可以使用 方法引用

Consumer consumer = str -> System.out.println(msg);

consumer.accept(msg);

// PrintStream对象

PrintStream printStream = System.out;

// 接口的方法 的参数列表和返回值类型 和 方法引用的 方法 参数列表和返回值类型保持一致

Consumer consumer2 = printStream::println;

consumer2.accept("hello lambda");

}

2.类::实例方法名

/***

* 方法引用2

*/

@Test

public void test01() {

String msg = "hello lambda!";

// lambda体中的功能已经有方法完成 可以使用 方法引用

Consumer consumer = str -> System.out.println(msg);

consumer.accept(msg);

// PrintStream对象

PrintStream printStream = System.out;

// 接口的方法 的参数列表和返回值类型 和 方法引用的 方法 参数列表和返回值类型保持一致

Consumer consumer2 = printStream::println;

consumer2.accept("hello lambda");

}

3.类::实例方法名

/***

* 方法引用3

* pow是Math类的方法

*/

@Test

public void test03() {

// lambda 表达式之前的写法

BinaryOperator binaryOperator = (x, y) -> Math.pow(x, y);

System.out.println(binaryOperator.apply(2d, 3d));

// 接口的方法 的参数列表和返回值类型 和 方法引用的 方法 参数列表和返回值类型保持一致

BinaryOperator binaryOperator2 = (x, y) -> Math.pow(x, y);

System.out.println(binaryOperator2.apply(2d, 3d));

}

构造器引用

与函数式接口相结合,自动与函数式接口中方法兼容。可以把构造器引用赋值给定义的方法,与构造器参数 列表要与接口中抽象方法的参数列表一致,默认使用空的构造器

@Test

public void test05() {

// 获取一个MyClass类型的实例

Supplier myClassSupplier=MyClass::new;

// 获取一个Object类型的实例

Supplier objectSupplier = Object::new;

}

数组引用

利用数组初始化一个Integer数组

@Test

public void test06() {

int size = 10;

Function function = (n) -> new Integer[n];

Integer[] integers = function.apply(size);

}

我的小结

当lambda体内的操作已经有方法实现了,这是的lambda体可以采用方法引用这种方式书写,代码更紧凑简洁,减少冗余。很重要的一点是:接口的方法的参数列表和返回值类型和方法引用的方法,参数列表和返回值类型保持一致

文章首发于黑猫のBlog欢迎来留言啊!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值