我有一个通用的功能接口(interface):@FunctionalInterfacepublicinterfaceFeeder{voidfeed(Tt);}还有几个为不同的Animal子类实现该接口(interface)的bean。@ConfigurationpublicclassConfig{@BeanpublicFeederdogFeeder(){returndog->dogService.feedDog(dog);}@BeanpublicFeedercatFeeder(){returncat->catService.feedCat(cat);}}现在,服务类已经被注入(inje
我正在学习将一些lambda表示形式写成FunctionalInterface.所以,要添加我使用的两个整数:BiFunctionbiFunction=(a,b)->a+b;System.out.println(biFunction.apply(10,60));给我输出70。但是如果我这样写BinaryOperatorbinaryOperator=(a,b)->a+b;我收到一条错误消息Wrongnumberoftypearguments:3;required:1BinaryOperator不是BinaryFunction的子项吗?我该如何改进它? 最佳答案
Lambda是JDK1.8新引进的简化代码语法格式,可以替代原先的匿名内部类,lambda写法只能实现接口的方法,不能用于实现抽象类实现。//以下代码对比一下两者写法上的区别interfaceAlarm{ voiddisplay();}publicclassLambda{ publicstaticvoidmain(String[]args){ Alarma=newAlram(){ @Override publicvoiddisplay(){ System.out.println("我是匿名内部类实现的方法"); } } //简化代码 Alramb=()->System.out.pri
学习Java8Lambda,只是想知道编译器如何知道Comparator中的哪个方法用于lambda表达式?好像不是SAM接口(interface)?它有2个抽象方法:@FunctionalInterfacepublicinterfaceComparator{intcompare(To1,To2);booleanequals(Objectobj);} 最佳答案 equals()不是抽象方法。这个方法覆盖了Object.equals(Object),并且只有Comparator接口(interface)能够将javadoc附加到方法上
学习Java8Lambda,只是想知道编译器如何知道Comparator中的哪个方法用于lambda表达式?好像不是SAM接口(interface)?它有2个抽象方法:@FunctionalInterfacepublicinterfaceComparator{intcompare(To1,To2);booleanequals(Objectobj);} 最佳答案 equals()不是抽象方法。这个方法覆盖了Object.equals(Object),并且只有Comparator接口(interface)能够将javadoc附加到方法上
为什么我不能使用默认方法实现创建@FunctionalInterface?@FunctionalInterfacepublicinterfaceMyInterface{defaultbooleanauthorize(Stringvalue){returntrue;}} 最佳答案 您可以在functionalinterface中使用默认方法但它的契约(Contract)要求您提供一个单一的抽象方法(或SAM)。由于默认方法有一个实现,所以它不是抽象的。Conceptually,afunctionalinterfacehasexactl
为什么我不能使用默认方法实现创建@FunctionalInterface?@FunctionalInterfacepublicinterfaceMyInterface{defaultbooleanauthorize(Stringvalue){returntrue;}} 最佳答案 您可以在functionalinterface中使用默认方法但它的契约(Contract)要求您提供一个单一的抽象方法(或SAM)。由于默认方法有一个实现,所以它不是抽象的。Conceptually,afunctionalinterfacehasexactl
SaidinJavadoc:Ifatypeisannotatedwiththisannotationtype,compilersarerequiredtogenerateanerrormessageunless...为什么SOURCE或CLASS不够用,比如@Override。 最佳答案 @FunctionalInterface注释有两个目的。关于编译器和它必须生成的错误,确实有一个SOURCERetentionPolicy就足够了,因为在这方面它只影响用@注释的类功能接口(interface)。然而,它还有第二个目的,记录这样一个
Java8为我们提供了许多使用功能接口(interface)的有趣方法,并为它们提供了新的注释:@FunctionalInterface。它的工作是告诉编译器如果我们不遵守功能接口(interface)的规则(只请一个需要重写的抽象方法)对我们大吼大叫。有带有此批注的43interfacesinthejava.util.functionpackage。在jdk.1.8.0/src中搜索@FunctionalInterface只会发现57次匹配。为什么其他可能添加了@FunctionalInterface的接口(interface)(例如AutoCloseable)仍然缺少它?annot
我在Java8中遇到了一个新术语:“函数式接口(interface)”。在使用lambda表达式时,我只能找到它的一种用途。Java8提供了一些内置的函数式接口(interface),如果我们想定义任何函数式接口(interface),我们可以使用@FunctionalInterface注释。它将允许我们在接口(interface)中只声明一个方法。例如:@FunctionalInterfaceinterfaceMathOperation{intoperation(inta,intb);}除了使用lambda表达式之外,它在Java8中还有多大用处?(问题here与我问的不同。它问的是