在成功编写了一个完成它应该做的事情的方法之后(下面简要缩短了示例)我想重构它不限于返回一个MyEntity列表而是一个List< SomeType扩展MyParentEntity>.因此,它应该只能接受扩展MyParentEntity但能够指定其他类型的那些类型(List< MyOtherEntity>,List< MyAwesomeEntity>等).
缩短的例子:
public static List getFavList(Context context) {
String prefKey = buildKey( new MyEntity() );
List entityList = new ArrayList();
SharedPreferences settings = context.getSharedPreferences(prefKey, 0);
GSON gson = new GSON();
MyEntity entity = gson.fromJson(settings.getString(0, null), MyEntity.class);
entityList.add(entity);
return entityList;
}
我google了很多,但我没有找到正确的方法来使这项工作没有任何编译器错误.我很感激能够找到解决方案的任何指针.
解决方法:
您将需要传递Class和您传递给buildKey的对象.
public static List getFavList(
Context context, Class clazz, T key
) {
String prefKey = buildKey(key);
List entityList = new ArrayList();
SharedPreferences settings = context.getSharedPreferences(prefKey, 0);
GSON gson = new GSON();
MyEntity entity = gson.fromJson(settings.getString(0, null), clazz);
entityList.add(entity);
return entityList;
}
(我不知道buildKey应该是什么.)
标签:java,generics,refactoring
来源: https://codeday.me/bug/20190901/1785666.html