Java 8 新特性———方法引用和构造器引用

本文详细介绍了Java 8中的方法引用、构造器引用和数组引用,包括它们的语法、应用场景及如何提高代码的可读性和效率。通过具体的代码示例,展示了如何将这些引用应用到Consumer、Function等函数式接口中。
摘要由CSDN通过智能技术生成

1.方法引用

当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!(实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致!)方法引用:使用操作符“::” 将方法名和对象或类的名字分隔开来。
如下三种主要使用情况:

  1. 对象::实例方法
  2. 类::静态方法
  3. 类::实例方法

例如:

x -> System.out.println(x);
等同于:
System.out::println;

例如:

BinaryOperator<Double> bo = (x, y) -> Math.pow(x,y);
等同于
BinaryOperator<Double> bo = Math.pow;

例如

Compare( (x, y) -> x.equals(y), "abcdef", "abcdef")
等同于
Compare( String::equals, "abc", "abc")

注意:当需要引用方法的第一个参数是调用对象,并且第二个参数是需要引用方法的第二个参数(或无参数)时,ClassName::MethodName。 

@Test
public void test1(){
	PrintStream ps = System.out;
	Consumer<String> con1 = (str) -> ps.println(str);
	con1.accept("Hello World!");
		
	Consumer<String> con2 = ps::println;
	con2.accept("Hello Java8!");
		
	Consumer<String> con3 = System.out::println;
}

2.构造器引用

格式:ClassName::new

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

例如:

Function<Integer, MyClass> fun = n -> new MyClass(n);
等同于
Function<Integer, MyClass> fun = MyClass::new;
//构造器引用
@Test
public void test7(){
	Function<String, Employee> fun = Employee::new;
		
	BiFunction<String, Integer, Employee> fun2 = Employee::new;
}

3.数组引用

格式:type[]::new

例如:

Function<Integer, Integer[]> fun = n -> new Integer[n];
等同于
Function<Integer, Integer[]> fun = Integer[]::new;
@Test
public void test6(){
	Supplier<Employee> sup = () -> new Employee();
	System.out.println(sup.get());// 10
	
	System.out.println("------------------------------------");
		
	Supplier<Employee> sup2 = Employee::new;
	System.out.println(sup2.get());// 20
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值