JDK8 引用(方法引用、构造器引用、数组引用)

/**

* @Description:

* 一、方法引用

* 如果lambda 体中的内容有方法已经实现了,我们可以使用“方法引用”

* (可以理解为方法引用是 Lambda表达式的另外一种表现形式)

* 主要有三种语法格式:

* 对象 ::实例方法名

* 类:: 静态方法名

* 类::实例方法名

* 注 : Lambda 体中调用方法的参数列表和返回类型,要与函数式接口中抽象方法的函数列表和返回值类型保持一致!

* 如果lambda 参数列表中的第一参数是实例方法的调用者,而第二个参数是实例方法的参数时,可以使用className::method

*

*

*

* 二、构造器引用

* className::new

* 注:需要调用的构造器的参数列表要与函数式接口中抽象方法的参数列表参数保持一致

*

* 三、数组引用

*

* @author:zhangys

* @date:Created in 19:46 2018/12/30

* @Modified By:

*/

public class Demo2 {

 

/**

* 对象 ::实例方法名

*/

@Test

public void test1(){

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

 

PrintStream ps = System.out;

Consumer con1 = ps :: println;

 

con1.accept("ssss");

 

 

PrintStream ps1 = System.out;

Consumer con2 = (x) -> ps1.println(x);

}

 

 

@Test

public void test2(){

Employee emp = new Employee();

Supplier sup = () -> emp.getName();

String str = sup.get();

System.out.println(str);

 

Supplier sup2 = emp::getAge;

Integer num = sup2.get();

System.out.println(num);

}

 

/**

* 类:: 静态方法名

*/

 

 

@Test

public void test3(){

Comparator com = (x,y) -> Integer.compare(x,y);

Comparator com1 = Integer::compareTo;

}

 

/**

* 类名::实例方法名

*/

 

@Test

public void test4(){

BiPredicate bp = (x,y) -> x.equals(y);

 

BiPredicate bp2 = String::equals;

}

 

/**

* 构造器引用

*/

@Test

public void test5(){

Supplier sup = () -> new Employee();

sup.get();

 

 

//构造器引用方式

Supplier sup2 = Employee::new;

Employee e = sup2.get();

System.out.println(e);

}

 

@Test

public void test6(){

Function fun = (x) -> new Employee(x);

Employee e = fun.apply(101);

System.out.println(e);

 

BiFunction bf = Employee::new;

}

 

/**

* 数组引用

*/

@Test

public void test7(){

Function fun = (x) -> new String[x];

String[] strs = fun.apply(10);

System.out.println(strs.length);

 

Function fun2 = String[]::new;

String[] strs2 = fun.apply(12);

System.out.println(strs2.length);

}

}

 

你可能感兴趣的:(java)