java 构造器 数组_Java8 方法引用与构造器引用,数组引用

packagejava_8;importorg.junit.Test;importjava.io.PrintStream;importjava.util.Comparator;import java.util.function.*;importjava.util.function.Function;/*** 方法引用:若Lambda体中的内容有方法已经实现了,那么我们可以使用"方法引用"

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

*

* 主要有三种语法格式:

*

* 对象::实例方法名

*

* 类::静态方法名

*

* 类::实例方法名

*

* 注意:

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

* 2.若Lambda参数列表中的第一个参数是实例方法的调用者,而第二个参数是实例方法的参数时,可以使用ClassName::method

*

* 二、构造器引用

* 格式:

* ClassName::new

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

*

* 三、数组引用

* Type::new;*/

public classTestMethodRef {//数组引用:

@Testpublic voidtest7(){

Function fun = x -> newString[x];

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

System.out.println(strs.length);

Function fun1 = String[]::new;

strs= fun1.apply(20);

System.out.println(strs.length);

}//构造器引用

@Testpublic voidtest5(){

Supplier sup = ()-> newEmployee();

Employee emp=sup.get();//构造器引用//根据参数列表自动匹配构造器

Supplier sup2 = Employee::new;

emp=sup2.get();

System.out.println(emp);

}

@Testpublic voidtest6(){

Function func = x -> newEmployee(x);

Employee emp= func.apply(10);

System.out.println(emp);

Function func1 = Employee :: new;

emp= func1.apply(10);

System.out.println(emp);//BiFunction bf = Employee::new;编译错误,没有两个Integer构造器

}//对象::实例方法名

@Testpublic voidtest1(){

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

PrintStream ps= System.out; //打印流//前提条件: Consumer中的方法体参数与返回值要与ps.println方法中的参数和返回值类型相同//Consumer: void accept(T t);在这里T为String//PrintStream: public void println(String x)//两者传入的参数都为String,返回值都为void所以满足,可以使用方法引用

Consumer con1 =ps::println;

Consumer con2 = System.out::println;//这三种方式结果相同

con.accept("huang");

con1.accept("huang");

con2.accept("huang");

}

@Testpublic voidtest2(){

Employee emp= newEmployee();

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

Supplier sup2 =emp::getName;

}//---------------------------------------//类::静态方法名

@Testpublic voidtest3(){

Comparator com = (x, y) ->Integer.compare(x, y);//前提条件:和上面相同

Comparator com1 =Integer::compare;

}//类::实例方法名

@Testpublic voidtest4(){

BiPredicate bp = (x, y) ->x.equals(y);boolean bool = bp.test(new String("huang"),"huang");

System.out.println(bool);//前提:第一个参数是实例方法的调用者,第二个参数是实例方法的参数//例如 x 是equal方法的调用者,y是实例方法的参数

BiPredicate bp2 =String::equals;

bool= bp2.test("huang","huang");

System.out.println(bool);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值