私は静的ファクトリメソッドとsetterメソッドを持つジェネリッククラスMyClass<T>
持っている:setterメソッドでの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>>
2番目のオプションでコンパイルできない理由はわかりません。
public class MyCustomClass extends CustomClass<String>
感謝を!それは働いている! –