【发布时间】:2016-07-21 07:25:06
【问题描述】:
我有一个泛型类MyClass<T> 带有一个静态工厂方法和一个setter 方法:
public class MyClass<T> {
public static <T> MyClass<T> with(Context context) {
MyClass<T> myClass = new MyClass<>();
myClass.context = context;
return myClass;
}
public void setClass(Class<? extends CustomClass<T>> customClass) {
...
}
...
}
使用 setter 方法,用户可以设置任何从“CustomClass”扩展而来的类。
到目前为止一切顺利。如果我这样做:
MyClass<String> myClass = MyClass.with(this);
myClass.setClass(MyCustomClass.class);
完美运行。但如果我这样做:
MyClass.with(this).setClass(MyCustomClass.class);
它不编译!编译器输出:
Error:(44, 87) error: incompatible types: Class<MyCustomClass> cannot be converted to Class<? extends MyCustomClass<Object>>
我不知道为什么它不能用第二个选项编译。 MyCustomClass 就像:
public class MyCustomClass extends CustomClass<String>
【问题讨论】: