【发布时间】:2018-10-04 10:10:54
【问题描述】:
我想编写一个具有泛型方法的功能性非泛型接口的实现。实现需要是内联闭包且简洁。
作为一个简化的示例
@FunctionalInterface interface Fn {
<R> R fn(R arg);
}
public class Scratch {
Fn id = arg -> arg;
//Fn nul = arg -> null;
//Fn requiresNonNull = ...
}
给了
/Scratch.java:5: error: incompatible types: invalid functional descriptor for lambda expression
Fn id = arg -> arg;
^
method <R>(R)R in interface Fn is generic
where R is a type-variable:
R extends Object declared in method <R>fn(R)
1 error
(实际上,参数将是一个泛型接口,其方法的返回类型为R。)
是否有一种解决方法,而不用回到冗长的匿名内部类?
有一个明显相似的问题,“Cannot convert functional interface with generic method into lambda expression”,但这源于使用名为 Integer 的类型参数,而不是像 T 这样的传统参数,Jon Skeet 接受的回答说他不知道解决方案我的问题。
还有一个很长的讨论“Functional interface confusion”未能回答这个问题。不可能是“这里最好是冗长的匿名内部类”,对吗?
【问题讨论】:
-
:P 如果 Jon Skeet 不知道...
标签: java lambda generic-method generic-lambda