【发布时间】:2015-07-02 14:09:55
【问题描述】:
我有一个带有构造函数签名的类,如下所示:
public class MyClass <U>{
public <T> MyClass(Set<T> data, Function<T,U> func)...
}
没关系。但是我想重载构造函数,如果你不提供函数func,它只会使用(item)->{return item;}。我编写了另一个构造函数,如下所示:
public <T> MyClass(Set<T> data){
this(
data,
(item)->{return item;}
);
}
这会导致类型不匹配错误,因为我作为参数提供给构造函数的函数采用类型为 T 的值,并返回相同的值,它应该是 U。我不明白为什么代数类型系统没有看到在这种情况下 U 和 T 是相同的,这没关系?
【问题讨论】:
-
你不需要像
(item)->{return item;}这样笨拙的语法,只需写item -> item。或者,好吧,Function.identity()... -
谢谢@Holger,我改用
Function.identity()
标签: java generics lambda java-8