T の型に応じてインターフェイス インスタンスを取得しようとしています。BaseDictionary を拡張する場所または何か。
public static <T extends BaseDictionary> IDictionaryDataSource<T> getEntityDataSourceInstance(Class<T> clazz,
Context cxt) {
if (Place.class.isAssignableFrom(clazz)) return (IDictionaryDataSource<T>) new PlaceDataSource(cxt);
//here some other types, same lines
return null;
}
public abstract class BaseDictionary{}
public class Place extends BaseDictionary{}
public interface IDictionaryDataSource<T extends BaseDictionary>{}
public abstract class BaseDictionaryDataSource<T extends BaseDictionary> implements IDictionaryDataSource<T>{}
public class PlaceDataSource extends BaseDictionaryDataSource<Place>{}
そして、私は得る
Type mismatch: cannot convert from PlaceDataSource to IDictionaryDataSource<T>
また
Type safety: Unchecked cast from PlaceDataSource to IDictionaryDataSource<T>
上記のようにキャストした場合。
コンパイルエラーと警告が発生する理由を説明できますか?
ここで呼び出されます
public static <T extends BaseDictionary> DictionaryElementPickerFragment<T> newInstance(Class<T> clazz, Context cxt){
//somecode here
fragment.setDataSource(DictUtils.getEntityDataSourceInstance(clazz, cxt));
}
こことグーグルで答えを見つけようとしましたが、成功しませんでした。助けていただければ幸いです。今、私はこう思う
コードが根本的に間違っているため、問題を回避するためのヘルパー メソッドはありません。
前もって感謝します。