小编典典

如何从int转换为泛型Integer?

java

我对Java比较陌生,并且习惯于C#中的泛型,因此在此代码方面有些挣扎。基本上,我想要一个通用的方法来通过键来获取存储的Android偏好设置,尽管该代码很丑陋,但当它抛出ClassCastException异常时,它适用于布尔值而不是整数。谁能告诉我为什么这是错误的,也许可以帮助我改善整个例程(使用通配符?)?

    public static <T> T getPreference(Class<T> argType, String prefKey, T defaultValue,
        SharedPreferences sharedPreferences) {

    ...

    try {
        if (argType == Boolean.class) {
            Boolean def = (Boolean) defaultValue;
            return argType.cast(sharedPreferences.getBoolean(prefKey, def));
        } else if (argType == Integer.class) {
            Integer def = (Integer) defaultValue;
            return argType.cast(new Integer(sharedPreferences.getInt(prefKey, def)));
        } else {
            AppGlobal.logWarning("getPreference: Unknown type '%s' for preference '%s'. Returning default value.",
                    argType.getName(), prefKey);
            return defaultValue;
        }
    } catch (ClassCastException e) {
        AppGlobal.logError("Cast exception when reading pref %s. Using default value.", prefKey);
        return defaultValue;
    }
}

我的呼叫代码是:

        mAccuracy = GlobalPreferences.getPreference(Integer.class, prefKey, mAccuracy, sharedPreferences);

这是getInt()的Android代码:

public int getInt(String key, int defValue) {
        synchronized (this) {
            Integer v = (Integer)mMap.get(key);
            return v != null ? v : defValue;
        }
    }

我尝试了多种方法-使用本机int,强制转换为Integer,但是没有任何效果。


阅读 286

收藏
2020-11-30

共1个答案

小编典典

事实证明,我尝试读取的首选项存储为字符串,因此强制转换异常来自Android代码内部而不是我的内部。谢谢你的帮助。但是,由于我是Java新手,如果您认为我的例程普遍存在任何问题,请教我一个更好的方法。

2020-11-30