小编典典

Java泛型-在调用instanceof之后,有什么方法可以避免强制转换(和未经检查的警告)?

java

Android代码-SharedPreferences类导出用于持久/检索不同首选项的不同方法:

@SuppressWarnings("unchecked")
public static <T> T retrieve(Context ctx, String key, T defaultValue) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
    if (defaultValue instanceof Boolean) return (T) (Boolean) prefs
            .getBoolean(key, (Boolean) defaultValue);
    else if (defaultValue instanceof Float) return (T) (Float) prefs
            .getFloat(key, (Float) defaultValue);
    // etc - another 4 cases
}
这行得通,我可以打电话给`boolean stored = retrieve(ctx, “BOOLEAN_KEY”,
true)我,但是我的问题是:由于我已经使用过instanceof并且T归结为特定的类,有没有一种方法可以避免单次和两次强制转换以及warning
unchecked`?

编辑
:如果我要通过类,我可能会调用getBoolean()getFloat()等。我想要的是简化方法的内部结构,摆脱警告,但仍然可以调用retrieve(ctx,"KEY", 1 or "string" or true)并得到我想要的东西


阅读 387

收藏
2020-11-30

共1个答案

小编典典

好吧我的问题 是(简单):
由于我已经使用过instanceof,并且T归结为特定的类,有没有一种方法可以避免单次和两次强制转换以及警告:未选中?

2020-11-30