问题标签 [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.

0 投票
1 回答
363 浏览

lambda - lambda 表达式实际上是在底层实现 java 接口吗?

下面是使用 lambda 表达式作为sort()方法参数的 java 程序。

使用 Eclipse,当我说方法F3sort(),控制实际上再次转到sort()java 7 版本中使用的相同方法签名(定义)。

在我的代码中,sort()方法中第二个参数的语法实际上是否等同于实现interface Comparator<T>,在幕后?就像是

0 投票
8 回答
112033 浏览

java - 构造函数中带有参数的 Java 8 供应商

为什么供应商只支持无参数构造函数?

如果存在默认构造函数,我可以这样做:

但是如果唯一的构造函数需要一个字符串,我必须这样做:

0 投票
3 回答
1464 浏览

java-8 - 为什么@FunctionalInterface 不能应用于 SAM 抽象基类

我刚开始学习骆驼,我看到的第一件事是

我(合理地恕我直言)尝试用

但这是无效的。

当我挖掘时,我发现 lambdas 适用于功能接口(如果接口符合条件,这是隐含的)但是 @FunctionalInterface 注释只能应用于接口(很公平),据我所知,抽象类没有等效的注释。RouteBuilder 当然是一个抽象类。

为什么 lambdas 仅限于接口?

接口和使“功能类”不安全/不可预测/不合理的类之间的本质区别是什么?

我可以理解是否有一些限定符,例如抽象方法必须是公共的,但是我无法解释为什么上述不合理。

0 投票
1 回答
1039 浏览

java - 带有函数的 Java 8 Lambda作为论据

Lambda Java 8(Oracle JDK)中有趣的编译错误

我有一个方法调用:

这是我试图调用的方法:

我得到的编译错误是:

奇怪的是,这编译

为什么编译器无法将 lambda 合成为 Function ?

0 投票
4 回答
4377 浏览

java - Please Explain Java 8 Method Reference to instance Method using class name

Please explain how

  1. boolean sameTemp() is compatible with func() in Functional interface.
  2. sameTemp() method got implemented on func() in Functional Interface.
  3. count = counter(weekDayHighs, HighTemp::sameTemp, new HighTemp(89)); is working

Please Explain All points separately.

0 投票
1 回答
4280 浏览

java - Java 8 lambda 执行

我怎样才能在 Java 8 中做这样的事情?

现在我收到以下错误:

此表达式的目标类型必须是函数式接口

0 投票
1 回答
104 浏览

lambda - 带有不兼容参数的 Java 8 Lambda 翻译

输出:

这在 1.8.0_45.jdk 上成功运行。Container#add 如何转换为 ObjIntConsumer#accept?

0 投票
2 回答
222 浏览

java - 功能接口的行为和方法参考

当属于变量的方法的引用被销毁时会发生什么?

0 投票
7 回答
34937 浏览

java - 为什么我需要一个函数式接口来使用 lambdas?

我认为这个问题已经存在于某个地方,但我无法找到它。

我不明白,为什么必须有一个函数式接口才能使用 lambda。考虑以下示例:

这可以正常工作,但是如果您取消注释注释行,则不会。为什么?据我了解,编译器应该能够区分这两种方法,因为它们具有不同的输入参数。为什么我需要一个功能接口并炸毁我的代码?

编辑:链接的重复项没有回答我的问题,因为我在询问不同的方法参数。但是我在这里得到了一些非常有用的答案,感谢所有帮助过的人!:)

EDIT2:对不起,我显然不是母语人士,但要准确地说:

我要问的只是论点。方法名称无关紧要,但每个方法都采用不同参数的唯一顺序,因此,Oracle 可以实现此功能,而不是只为每个“Lambda 接口”提供一个方法。

0 投票
2 回答
1898 浏览

java - 编译器不推断 System.out::println 功能接口

我有一个重载方法,它采用两个不同的功能接口作为参数(RunnbleSupplier)。System.out.println显然只与 兼容Runnable,因为它是一种void方法。然而编译器仍然声称该调用是模棱两可的。这怎么可能?

编译器输出:

基于第二个错误(argument mismatch, void cannot be converted to R),编译器不应该能够消除调用的歧义吗?然后,这将处理两个编译器错误(因为它既不会模棱两可,也不会尝试将 void 转换为 R)。

为什么() -> {}能够System.out::flush解决?它们具有与 相同的签名System.out.println。当然,它System.out.println被带有参数的版本重载,但这些重载版本都不匹配Supplieror Runnable,所以我看不出它们在这里有什么关系。

编辑:

似乎这确实可以使用Eclipse 编译器进行编译和运行。哪个编译器是正确的,或者任何一种行为都允许?