我有一个具有构造函数签名的类,如下所示:
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是相同的,这没关系?
发布于 2015-07-02 14:15:06
系统必须假定T和U是两种不同的类型,因为您给它们取了两个不同的名称。但是,您可以从第二个ctor中删除额外的泛型类型,如下所示:
public class MyClass <U>{
public <T> MyClass(Set<T> data, Function<T,U> func) {...}
public MyClass(Set<U> data){
this(
data,
(item)->{return item;}
);
}
}https://stackoverflow.com/questions/31186885
复制相似问题