我写了以下代码:
public interface MyInterface<T extends Number>{
T get();
}
public static class MyClass<T extends Number> implements MyInterface<T>{
private final MyInterface<T> t;
public static <T extends Number> MyClass<T> create(MyInterface<T> t){
return new MyClass<>(t);
}
private MyClass(MyInterface<T> t){
this.t = t;
}
@Override
public T get() {
return t.get();
}
}
public void create(Collection<? extends MyInterface<? extends Number>> c){
c.stream().map(o -> MyClass.create(o)); // <---- Compile-error
}
原因如下:
原因:不存在类型变量
T
的实例,以便? extends Number
可以转换为T
错误不明确。但我可以写
c.stream().map(o -> MyClass.create((MyInterface<? extends Number>) o));
并且演员甚至没有取消选中。编译器为什么要投诉?