Hug*_*son 5 java generics lambda java-8
我有一个带有构造函数签名的类,如下所示:
public class MyClass <U>{
public <T> MyClass(Set<T> data, Function<T,U> func)...
}
Run Code Online (Sandbox Code Playgroud)
没关系.但是我想重载构造函数,如果你不提供Function func,它就会使用(item)->{return item;}.我写了另一个看起来像这样的构造函数:
public <T> MyClass(Set<T> data){
this(
data,
(item)->{return item;}
);
}
Run Code Online (Sandbox Code Playgroud)
这导致了类型不匹配错误,因为我作为参数提供给我的构造函数的函数接受一个类型的值T,并返回相同的值,该值应为a U.我不明白为什么代数类型系统没有看到在这种情况下U和T是相同的,那没关系?
系统必须假设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;}
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |