Dav*_*rry 2 java generics enums android
我试图将Enums保存为首选项.
为了保存枚举,我可以使用:
public static <T extends Enum<T>> void savePreference(final Context context, final String id, final T value) {
SharedPreferences settings = context.getSharedPreferences(SESSION_TOKEN, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString(id, value.name());
editor.apply();
}
Run Code Online (Sandbox Code Playgroud)
我试图在下面做一些事情,这将允许我将一个偏好读入一个通用的枚举:
public static <T extends Enum<T>> T getPreference(final Context context, final String id, final T defaultValue) {
try {
SharedPreferences settings = context.getSharedPreferences(SESSION_TOKEN, Context.MODE_PRIVATE);
String name = settings.getString(id, null);
return name != null ? Enum.valueOf(T, name) : defaultValue;
} catch (Exception e) {
Log.e("ERROR GETTING", e.toString());
return defaultValue;
}
}
Run Code Online (Sandbox Code Playgroud)
但这给了我错误:
Error:(93, 48) error: cannot find symbol variable T
Run Code Online (Sandbox Code Playgroud)
在"Enum.valueOf(T,name)"表达式中.
我也试过使用T.valueOf(name)但会产生参数不匹配错误.
我已经能够通过不使用泛型和编码特定的实现来解决它,但这种方法失败了:
public static Constants.ButtonLocations getPreference(final Context context, final String id, final Constants.ButtonLocations defaultValue) {
try {
SharedPreferences settings = context.getSharedPreferences(SESSION_TOKEN, Context.MODE_PRIVATE);
String name = settings.getString(id, null);
return name != null ? Constants.ButtonLocations.valueOf(name) : defaultValue;
} catch (Exception e) {
Log.e("ERROR GETTING", e.toString());
return defaultValue;
}
}
Run Code Online (Sandbox Code Playgroud)
如何创建getPreference的通用版本?
您可以Class<T>向方法添加参数
public static <T extends Enum<T>> T getPreference(final Context context, final String id, final Class<T> clazz, final T defaultValue)
Run Code Online (Sandbox Code Playgroud)
然后你可以使用
Enum.valueOf(clazz, name)
Run Code Online (Sandbox Code Playgroud)
或者,如果defaultValue永远不会null,您可以摆脱这个额外的参数并使用此默认值来获取类.
Enum.valueOf(defaultValue.getDeclaringClass(), name)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1154 次 |
| 最近记录: |