Java8中的方法与构造器怎么引用(java,开发技术)

时间:2024-04-29 08:48:32 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

什么是方法引用

当要传递给 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");}

Java8中的方法与构造器怎么引用

情况二:类::静态方法名

//情况二:类::静态方法//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("有参构造器被调用啦!");}}

Java8中的方法与构造器怎么引用

//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);

Java8中的方法与构造器怎么引用

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Java8中的方法与构造器怎么引用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:怎么用命令行CLI一键生成各种烦人的lint配置下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18