Java泛型:不兼容的类型

Java泛型:不兼容的类型,java,generics,Java,Generics,我有一个带有静态工厂方法和setter方法的泛型类MyClass: public class MyClass<T> { public static <T> MyClass<T> with(Context context) { MyClass<T> myClass = new MyClass<>(); myClass.context = context; return myClass

我有一个带有静态工厂方法和setter方法的泛型类
MyClass

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) {
        ...
    }
    ...
}
它不能编译!编译器输出:

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

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

它不知道专业化。你需要像这样做

MyClass.<String>with(this).setClass(MyCustomClass.class);
MyClass.<String>with(this).setClass(MyCustomClass.class);
MyClass.with(this.setClass)(MyCustomClass.class);

因此,它知道你将与它“对话”

在第二条语句中,您没有定义类型
t
,因此编译器无法编译,因为对
setClass
的限制

您应该在
with
函数中添加
T
,以实现可变目的:

  public static <T> MyClass<T> with(Object context, Class<T> clazz) {
    MyClass<T> myClass = new MyClass<>();
    myClass.context = context;
    return myClass;
  }

MyClass.with(this, String.class).setClass(MyCustomClass.class);
带有(对象上下文、类clazz)的公共静态MyClass{
MyClass MyClass=新的MyClass();
myClass.context=上下文;
返回myClass;
}
MyClass.with(this,String.class).setClass(MyCustomClass.class);
或通过:

MyClass.with(this.setClass)(MyCustomClass.class);
MyClass.<String>with(this).setClass(MyCustomClass.class);
  public static <T> MyClass<T> with(Object context, Class<T> clazz) {
    MyClass<T> myClass = new MyClass<>();
    myClass.context = context;
    return myClass;
  }

MyClass.with(this, String.class).setClass(MyCustomClass.class);
MyClass.<String>with(this).setClass(MyCustomClass.class);