问题标签 [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 投票
2 回答
397 浏览

java - 支持功能接口重构的注释

考虑以下示例:

功能接口Greeter有两种实现。使用该子句实现,而ExplicitGreeterImpl没有它的实现。尽管如此,它的设计目的是实现,就像.GreeterimplementsImplicitGreeterImpl::doTheGreetingGreeterImplicitGreeterImpl::doTheGreetingGreeterExplicitGreeterImpl

现在,我想重构Greeter接口,所以我可以给它传递一个名字:

我可以通过 Eclipse 提供的Change Method Signature重构来做到这一点(我相信其他 IDE 也有类似的重构)。这会自动更新Greeter接口的所有实现和使用。实现接收新参数,而用法传递可配置的默认值。这适用于ExplicitGreeterImpl,但是重构不涉及该ImplicitGreeterImpl::doTheGreeting方法。因此,赋值

成为编译时错误。要解决这个问题,我必须手动调整方法的签名ImplicitGreeterImpl::doTheGreeting

现在,我了解到在许多情况下自动调整ImplicitGreeterImpl::doTheGreeting. 但是,我觉得目前的工作流程可以改进:

  • Eclipse 不会在重构预览中显示提示将出现编译时错误的警告。
  • 应该可以对方法进行注释以阐明它应该实现给定的功能接口。

例如,ImplicitGreeterImpl可能看起来像这样:

现在,重构工具可以确定ImplicitGreeterImpl::doTheGreeting应该实现Greeter,因此,它们可以自动更改其签名。

因此,我的问题是:有没有办法告诉重构工具给定的方法应该实现给定的功能接口?我搜索了上面提出的注释,但没有发现任何有用的东西。

0 投票
1 回答
100 浏览

java - 从函数中使用 compose() 或 andThen() 时返回一个对象

为了测试功能接口 Function 的 compose() 和 andThen() 方法,我做了一个简单的代码:

但是正如你所看到的,这段代码不会编译。给定原因:不存在类型 variable(v) V 的实例,因此 Function 符合 Trans。

关注多个关于通配符中扩展和超级差异的主题,我了解它们在列表中的使用,但不确定为什么它不能在这里编译。

有什么方法可以在 testCompose() 方法中继续返回对象 Trans 还是必须返回一个 Function 来让代码编译?

0 投票
2 回答
791 浏览

java - 具有内部枚举的策略模式

我试图从我的代码中去掉大的 switch 语句,我认为基于我现有枚举的策略模式会很好。这个概念是这样的:

所以我可以像这样使用它:

但我不喜欢这部分,Option.Option1.setMethodToExecute(this::action1);因为我的枚举有越来越多的选择,我想把所有这些都放在枚举中。完美的是这样的:

但这是不可能的,因为枚举是静态的,我无法通过 MyStrategy.this 访问封闭实例。我需要枚举,因为我有一组选项,并且使用 values() 或 valueOf() 等方法很方便,但我想要的是单行调用而不是增长开关。您是否有任何想法如何实现这样的事情,或者是否有任何解决方法可以使这个枚举构造函数调用成为可能Option1(MyStrategy.this::action1)

0 投票
1 回答
614 浏览

java - 未经检查地调用 'lambda(T, T)' 作为原始类型 'my.lambda.closure' 的成员

在练习 Labdas 时,我正在通过我的方法传递Lambdas 。main它运行正常,但IntelliJ显示警告说:Unchecked call to 'lambda(T, T)' as a member of raw type 'my.lambda.closure'at line 18. 我在这里想念什么?

0 投票
8 回答
19884 浏览

java - 我们什么时候应该在 Java 8 中使用供应商?

这段代码有什么区别?

我开始学习 Java 8 中的功能接口,但不了解供应商的好处。何时以及如何确切地使用它们。供应商是否提高了性能或抽象级别的好处?

感谢您的回答!这不是重复的问题,因为我使用搜索并没有找到我需要的东西。

更新1: 你的意思是这个?

0 投票
0 回答
32 浏览

java - 仅允许 Object 时将 Function 作为参数传递。像外部库

我必须处理一个仅接受 Object 作为参数的外部库。像这样的方法签名:ExternalObj.setValue(Object object)

我的问题是为什么我需要下面的studtWrapper?

为什么我不能直接使用lamba?

0 投票
2 回答
90 浏览

java - 功能接口

我是功能界面的新手,今天我从几个教程网站学习。我有一个问题请提供您的建议并指导我。

下面提到的代码对我有一个问题。

对象类是所有 java 类的父类。这里的 wait() 方法说没有被覆盖,因为这是最终的。所以这意味着 Demo 接口也是 Object 类的子类(一般而言)。

问题:所以,现在代码在Object clone(); 方法没有注释。所以意味着这个方法是在接口 Demo 中声明的。但是当我们点击它的实现时,我们会移动到 Object 类的 clone() 方法。

当我们注释clone()方法和取消注释equals()方法时,我们得到编译时错误,接口不是FunctionalInterface。为什么 ??????以及为什么它与 clone() 方法的功能接口。

请不要说 clone() 是受保护的,如果克隆在 Object 类中受保护是怎么回事。请为我解释。

谢谢,萨维

0 投票
1 回答
925 浏览

java - 为什么 Stream::reduce 中的累加器是 BiFunction 而不是 BinaryOperator 像组合器?

为什么Stream::reduce方法 a中的累加器参数BiFunctionBinaryOperator组合器参数不同。

为什么是它的类型 BiFunction<U, ? super T, U>?为什么T?应该是BiFunction<U, ? extends U, U>吗?

0 投票
0 回答
659 浏览

java - 为什么要标记单个方法接口@FunctionalInterface?

SonarQube 给了我一堆Squid:S1909 @FunctionalInterface 注解应该用于标记 Single Abstract Method 接口警告。

解释不是太好。它提到了破坏现有的 lamda 表达式,但是如果我向接口添加新方法并破坏现有的 lambda,编译器不会已经捕获吗?这里的注释主要是意图揭示吗?

如果代码没有在 lambda 表达式中使用(不是因为它来自遗留代码库,其中 lambda 中只使用了一些接口)--- 添加有什么意义@FunctionalInterface吗?

0 投票
3 回答
550 浏览

java-8 - 方法覆盖和功能接口编译错误

我复制了在使用 Java 8 @FunctionalInterface(eclipse) 时遇到的错误。以下不编译;Refined产生错误:

Refined扩展所有FunctionReceiverGiver导致错误;删除其中任何一个,代码就会编译。这是正确的行为吗?如果是这样,我可以/应该如何重构?

更新

这似乎会产生类似的错误:

另外,我会注意到没有@FunctionalInterface一切都可以编译;接口实例不能表示为 lambda。