Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为lambda编写通用方法?_Java_Lambda - Fatal编程技术网

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中使用。@瀑布实际上,这就是在重复问题(父级)中链接的规范的状态。不,如果类型的绑定在方法级别,则该类型不会强制转换为整数。