Java8中的方法与构造器怎么引用
导读:本文共2285.5字符,通常情况下阅读需要8分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 什么是方法引用当要传递给 Lambda 体的操作,已经有实现的方法了,可以使用方法引用!方法引用可以看做是 Lambda 表达式深层次的表达。换句话说,方法引用就是 Lambda 表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是 Lambda 表达式的一个语法糖。要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参... ...
目录
(为您整理了一些要点),点击可以直达。什么是方法引用
当要传递给 Lambda 体的操作,已经有实现的方法了,可以使用方法引用!
方法引用可以看做是 Lambda 表达式深层次的表达。换句话说,方法引用就是 Lambda 表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是 Lambda 表达式的一个语法糖。
要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致!
格式:使用操作符"::"将类(或对象)与方法名分隔开来。
有如下三种主要使用情况:
>对象::实例方法名
>类::静态方法名
>类::实例方法名
方法引用的三种情况案例
情况一:对象::实例方法名
publicstaticvoidmain(String[]args){//情况一:对象::实例方法名//Consumer中的voidaccept(Tt)//voidaccept(Tt)与打印流中的voidprintln(Tt)参数类型和返回值一致,因此可以用方法引用//Lambda表达式Consumer<String>con1=str->System.out.println(str);con1.accept("aniu1");//方法引用改写PrintStreamps=System.out;//对象::实例方法名Consumer<String>con2=ps::println;con2.accept("aniu2");}
情况二:类::静态方法名
//情况二:类::静态方法//Comparator中的intcompare(Tt1,Tt2)//intcompare(Tt1,Tt2)与Integer中的intcompare(Tt1,Tt2)参数类型和返回值一致,因此可以用方法引用//Lambda表达式Comparator<Integer>com3=(t1,t2)->Integer.compare(t1,t2);System.out.println(com3.compare(12,21));//方法引用改写Comparator<Integer>com4=Integer::compare;System.out.println(com4.compare(12,21));
情况三:类::实例方法名
//情况三:类::实例方法名(有难度)---前面方法引用的要求针对的是情况一和情况二,对情况三不适用//Comparator中的intcompare(Tt1,Tt2)//String中的intt1.compareTo(t2)//Tt1作为compareTo的调用者,T的类型作为类::实例方法名中的类//Lambda表达式Comparator<String>com5=(s1,s2)->s1.compareTo(s2);System.out.println(com5.compare("A","B"));//方法引用改写Comparator<String>com6=String::compareTo;System.out.println(com6.compare("A","B"));
这一块还是比较抽象的,多去理解,我不在多举例子!
构造器引用
和方法引用类似,函数式接口的抽象方法的形参列表和构造器的形参列表一致,抽象方法的返回值类型即为构造器所属的类的类型!
package构造器引用;importjava.util.function.Supplier;/***@Author:Aniu*@Date:2023/2/2321:33*@descriptionTODO*/publicclassDemo{publicstaticvoidmain(String[]args){//原始写法Supplier<People>sup1=newSupplier<People>(){@OverridepublicPeopleget(){returnnewPeople();}};sup1.get();//Lambda表达式Supplier<People>sup2=()->newPeople();sup2.get();//构造器引用//Supplier中的Tget()//People的空参构造器People()Supplier<People>sup3=People::new;sup3.get();}}classPeople{Stringname;intage;publicPeople(){System.out.println("空参构造器被调用啦!");}publicPeople(inta){this.age=a;System.out.println("有参构造器被调用啦!");}}
//Lambda表达式Function<Integer,People>fun1=id->newPeople(id);fun1.apply(18);//构造器引用//Function中的Rapply(Tt)//函数式接口//People的有参构造器People(Tt)Function<Integer,People>fun4=People::new;fun1.apply(18);
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
Java8中的方法与构造器怎么引用的详细内容,希望对您有所帮助,信息来源于网络。