Java泛型:不兼容的类型
我有一个带有静态工厂方法和setter方法的泛型类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
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);