java8新特性【二】:方法引用、构造器引用、数组引用

【三】方法引用

方法引用:方法引用可以看做是Lambda表达式的深层表达,也就是函数式接口的实例。

要求:实现接口的抽象方法的参数列表和返回值类型必须与方法引用的方法的参数列表和返回值类型保持一致。

格式:使用操作符“::”将类或对象与方法名分隔开

使用情况:当要传递Lambda表达式体的操作,已经有实现方法,可以使用方法引用。

使用要求:接口中的抽象方法的形参列表和返回值类型与方法引用的方法的形参列表和返回值类型相同。(主要针对于情况一和情况二)
三种主要的使用情况:

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

代码示例:

package methodreferences;

import java.io.PrintStream;
import java.util.function.Consumer;

public class MethodReferences1 {
	public static void main(String[] args) {
	/*Consumer中的------accept(T t)方法
	PrintStream中的------println(T t)方法*/
		Consumer<String> con=str->System.out.println(str);
		con.accept("我爱北京天安门");
		
		System.out.println("--------------------------------");
		PrintStream ps=System.out;
		Consumer<String> con2=ps::println;
		con2.accept("我爱北京天安门");
	}
}

示例输出:

【四】构造器引用

要求:实现接口的抽象方法的参数列表必须与构造器引用的方法的参数列表保持一致。

抽象方法的返回值类型就是构造器所属类的类型。

如:R apply(T t)与void Student( String name)参数列表保持一致,因此可以采用构造函数引用

代码示例:

package constructorref;

import java.util.function.Function;

/*
构造器引用:
*/
public class ConstructorRefTest {
	public static void main(String[] args) {
	//Function<T,R> 函数型接口:对类型为T的对象应用操作,并返回结果R类型的对象。包含方法:R apply(T t);
		/*R apply(T t)与void Student( String name)相似,因此可以采用构造函数引用
		 * 形式:类名::new
		 * */
		Function<String,Student> fun=name->new Student(name);
		Student stu=fun.apply("wangerxiao");
		System.out.println(stu);
		
		System.out.println("--------------------------------");
		Function<String,Student> fun2=Student::new;
		Student stu2=fun.apply("zhangsan");
		System.out.println(stu2);
	}
}


class Student{
	private int id;
	private String name;
	
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Student( String name) {
		super();
		this.name = name;
	}
	public Student(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + "]";
	}
	
}

示例输出:

 

【五】数组引用

类似于构造器引用

代码示例:

package arrayref;

import java.util.Arrays;
import java.util.function.Function;

public class ArrayRefTest {
	public static void main(String[] args) {
		//Function<T,R> 函数型接口:对类型为T的对象应用操作,并返回结果R类型的对象。包含方法:R apply(T t);
		Function<Integer,Double[]> fun=len->new Double[len];
		Double[] dou=fun.apply(3);
		System.out.println(Arrays.toString(dou));
		
		System.out.println("--------------------------------------");
		Function<Integer,Double[]> fun2=Double[]::new;
		Double[] dou2=fun.apply(6);
		System.out.println(Arrays.toString(dou2));
	}
}

示例输出:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值