Java泛型:不兼容的类型

Vic*_*cia 4 java generics

我有一个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) {
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

使用setter方法,用户可以设置从"CustomClass"扩展的任何类.

到现在为止还挺好.如果我做:

MyClass<String> myClass = MyClass.with(this);
myClass.setClass(MyCustomClass.class);
Run Code Online (Sandbox Code Playgroud)

它完美地运作.但如果我这样做:

MyClass.with(this).setClass(MyCustomClass.class);
Run Code Online (Sandbox Code Playgroud)

它不编译!编译器输出:

Error:(44, 87) error: incompatible types: Class<MyCustomClass> cannot be converted to Class<? extends MyCustomClass<Object>>
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它不会用第二个选项编译.MyCustomClass就好像:

public class MyCustomClass extends CustomClass<String> 
Run Code Online (Sandbox Code Playgroud)

Art*_*ski 5

请注意,您的工作示例和具有编译错误的单行程序之间缺少信息.

它不知道专业化.你需要做点什么

MyClass.<String>with(this).setClass(MyCustomClass.class);
Run Code Online (Sandbox Code Playgroud)

所以它知道你会"与它说话".