【发布时间】:2018-08-13 12:41:44
【问题描述】:
有人可以帮我如何为以下功能接口编写 lambda 实现。
public interface InnerLambda {
public <R> R test(String str);
}
而且我的课很好
public class Example {
public static void main(String[] args) {
testInner(str->"");
}
public static void testInner(InnerLambda innerLambda){
}
}
【问题讨论】:
-
像
<R> R test(String str)这样的方法签名承诺返回调用者喜欢替换R的任何类型。您的 lambda 表达式返回String,因此不履行承诺。testInner应该如何知道提供的参数返回String而不是另一个R?事实上,一个普通的 Java 实现是不可能实现这个承诺的,除非它总是返回null或者永远不会正常完成。这使得使用这种有限使用声明。 -
@Holger 等等...所以你不能使用这个 lambda 表达式,因为
JLS禁止这样做。但是您也不能将其用作方法参考。所以这是一个无用的@FunctionalInterface就被用于 StreamAPI 让我们说 -
@Eugene 你可以将此接口与兼容的通用实现方法的方法引用一起使用。但这些方法的用途有限。
标签: java-8