Java 如何为lambda编写通用方法?
我有以下界面:Java 如何为lambda编写通用方法?,java,lambda,Java,Lambda,我有以下界面: public interface Mapper { public <T> T map(T element); } 公共接口映射器{ 公共T图(T元素); } 当我做Mapper-Mapper=(intn)->n*2 我明白了这个问题: 非法lambda表达式:Mapper类型的方法映射是泛型的 我错过了什么?如何创建在lambda表达式中使用的泛型方法?您应该将定义更改为 public interface Mapper<T> { // type
public interface Mapper {
public <T> T map(T element);
}
公共接口映射器{
公共T图(T元素);
}
当我做Mapper-Mapper=(intn)->n*2代码>
我明白了这个问题:
非法lambda表达式:Mapper类型的方法映射是泛型的
我错过了什么?如何创建在lambda表达式中使用的泛型方法?您应该将定义更改为
public interface Mapper<T> { // type bound to the interface
T map(T element);
}
公共接口映射器{//绑定到接口的类型
T图(T元素);
}
然后将其用作:
Mapper<Integer> mapper = element -> element * 2; // notice Integer and not 'int' for the type
Mapper Mapper=element->element*2;//注意类型的整数而不是int
也可以写为:
Mapper<Integer> mapper = (Integer element) -> element * 2;
Mapper映射器=(整数元素)->元素*2;
是的,谢谢,这确实有效。但是为什么我不能像在列表界面中的.toArray
方法那样在方法级别声明类型参数呢T[]toArray(T[]a)
@瀑布可以,但是抽象方法map
的实现需要推断类型/转换为整数才能执行操作*2
,在这里,您必须始终编写一个匿名类来表示完整的实现,而不仅仅是lambdas。。。我不确定toArray是否可以用作lambda,你有没有读到在lambda中使用的toArray
?但是如果我读到(整型元素)->元素*2
。我不是已经显式地将cast类型转换为整数了吗?我不确定在lambdas中是否使用了toArray
,但我只是感到困惑,不可能使用方法级别类型参数来创建一个泛型方法,以便在lambdas中使用。@瀑布实际上,这就是在重复问题(父级)中链接的规范的状态。不,如果类型的绑定在方法级别,则该类型不会强制转换为整数。