我想编写一个具有泛型方法的功能性非泛型接口的实现。实现需要是内联闭包并且简洁。
作为一个简化的例子
@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
。)
有没有一种解决方法,而不需要回到匿名内部类的冗长之处?
有一个明显相似的问题,“无法将具有泛型方法的功能接口转换为 lambda 表达式”,但这源于使用类型参数调用Integer
而不是传统的 like T
,并且 Jon Skeet 接受的答案说他不知道我的解决方案问题。
还有一个很长的讨论,“功能接口混乱”,无法回答这个问题。不可能是“这里最好使用冗长的匿名内部类”,可以吗?