У меня есть универсальный класс MyClass<T>
со статическим фабричным методом и присваивателя:Java дженериков: несовместимые типы
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) {
...
}
...
}
С методом сеттер, пользователь может установить любой класс, который наследуется от «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>
Спасибо вам большое! Работает! –