问题标签 [functional-interface]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
lambda - lambda 表达式实际上是在底层实现 java 接口吗?
下面是使用 lambda 表达式作为sort()
方法参数的 java 程序。
使用 Eclipse,当我说方法F3
时sort()
,控制实际上再次转到sort()
java 7 版本中使用的相同方法签名(定义)。
在我的代码中,sort()
方法中第二个参数的语法实际上是否等同于实现interface Comparator<T>
,在幕后?就像是
java - 构造函数中带有参数的 Java 8 供应商
为什么供应商只支持无参数构造函数?
如果存在默认构造函数,我可以这样做:
但是如果唯一的构造函数需要一个字符串,我必须这样做:
java-8 - 为什么@FunctionalInterface 不能应用于 SAM 抽象基类
我刚开始学习骆驼,我看到的第一件事是
我(合理地恕我直言)尝试用
但这是无效的。
当我挖掘时,我发现 lambdas 适用于功能接口(如果接口符合条件,这是隐含的)但是 @FunctionalInterface 注释只能应用于接口(很公平),据我所知,抽象类没有等效的注释。RouteBuilder 当然是一个抽象类。
为什么 lambdas 仅限于接口?
接口和使“功能类”不安全/不可预测/不合理的类之间的本质区别是什么?
我可以理解是否有一些限定符,例如抽象方法必须是公共的,但是我无法解释为什么上述不合理。
java - 带有函数的 Java 8 Lambda作为论据
Lambda Java 8(Oracle JDK)中有趣的编译错误
我有一个方法调用:
这是我试图调用的方法:
我得到的编译错误是:
奇怪的是,这编译
为什么编译器无法将 lambda 合成为 Function ?
java - Please Explain Java 8 Method Reference to instance Method using class name
Please explain how
boolean sameTemp()
is compatible withfunc()
in Functional interface.sameTemp()
method got implemented onfunc()
in Functional Interface.count = counter(weekDayHighs, HighTemp::sameTemp, new HighTemp(89));
is working
Please Explain All points separately.
java - Java 8 lambda 执行
我怎样才能在 Java 8 中做这样的事情?
现在我收到以下错误:
此表达式的目标类型必须是函数式接口
lambda - 带有不兼容参数的 Java 8 Lambda 翻译
输出:
这在 1.8.0_45.jdk 上成功运行。Container#add 如何转换为 ObjIntConsumer#accept?
java - 功能接口的行为和方法参考
当属于变量的方法的引用被销毁时会发生什么?
java - 为什么我需要一个函数式接口来使用 lambdas?
我认为这个问题已经存在于某个地方,但我无法找到它。
我不明白,为什么必须有一个函数式接口才能使用 lambda。考虑以下示例:
这可以正常工作,但是如果您取消注释注释行,则不会。为什么?据我了解,编译器应该能够区分这两种方法,因为它们具有不同的输入参数。为什么我需要一个功能接口并炸毁我的代码?
编辑:链接的重复项没有回答我的问题,因为我在询问不同的方法参数。但是我在这里得到了一些非常有用的答案,感谢所有帮助过的人!:)
EDIT2:对不起,我显然不是母语人士,但要准确地说:
我要问的只是论点。方法名称无关紧要,但每个方法都采用不同参数的唯一顺序,因此,Oracle 可以实现此功能,而不是只为每个“Lambda 接口”提供一个方法。
java - 编译器不推断 System.out::println 功能接口
我有一个重载方法,它采用两个不同的功能接口作为参数(Runnble
和Supplier
)。System.out.println
显然只与 兼容Runnable
,因为它是一种void
方法。然而编译器仍然声称该调用是模棱两可的。这怎么可能?
编译器输出:
基于第二个错误(argument mismatch, void cannot be converted to R
),编译器不应该能够消除调用的歧义吗?然后,这将处理两个编译器错误(因为它既不会模棱两可,也不会尝试将 void 转换为 R)。
为什么() -> {}
能够System.out::flush
解决?它们具有与 相同的签名System.out.println
。当然,它System.out.println
被带有参数的版本重载,但这些重载版本都不匹配Supplier
or Runnable
,所以我看不出它们在这里有什么关系。
编辑:
似乎这确实可以使用Eclipse 编译器进行编译和运行。哪个编译器是正确的,或者任何一种行为都允许?