我正在尝试根据 T 的类型获取接口实例。Place 或其他扩展 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));
}
我试图在这里和谷歌中找到答案,但没有成功。我将不胜感激。现在我这样想
没有解决此问题的辅助方法,因为代码根本上是错误的。
提前致谢。