通用/通配符问题。为什么需要明确的演员?

时间:2016-07-26 15:13:18

标签: java generics wildcard

我写了以下代码:

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));

并且演员甚至没有取消选中。编译器为什么要投诉?

0 个答案:

没有答案