我可以传递未定义的参数吗?

时间:2021-07-16 08:21:02

标签: java android

我可以像下面的例子一样传递未定义的参数吗:

//This method not working with me
public void setValue(String key, Object value) {
    if (key.equals("isNewUser"))
        editor.putBoolean(key, value);
    if (key.equals("isNotificationEnabled"))
        editor.putBoolean(key, value);
    if (key.equals("userScore"))
        editor.putInt(key, value);
    if (key.equals("userName"))
        editor.putString(key, value);
    editor.apply();
}

这些方法与我一起使用重载方法,如下所示:

public void setValue(String key, boolean value) {
    if (key.equals("isNewUser"))
        editor.putBoolean(key, value);
    if (key.equals("isNotificationEnabled"))
        editor.putBoolean(key, value);
    editor.apply();
}

public void setValue(String key, int value) {
    if (key.equals("userScore"))
        editor.putInt(key, value);
    editor.apply();
}

public void setValue(String key, String value) {
    if (key.equals("userName"))
        editor.putString(key, value);
    editor.apply();
}

有没有办法让它用一种方法而不是 3 种方法工作?

3 个答案:

答案 0 :(得分:2)

试着像下面那样投射你的 Object value

if (key.equals("userName"))
    editor.putString(key, (String) value); // when you are sure that value IS String

此外,您可以通过以下方式检查实例

if (value instanceof String)
    editor.putString(key, value);

顺便说一句。这看起来不是存储数据的正确方法(“统一”方法),迟早会抛出ClassCastException,最好为每个原始/实例类型保留方法

答案 1 :(得分:1)

我不知道为什么你需要用一种方法来做,在这些情况下重载是正确的选择,反正如果参数类型由key来保证,解决方案可以是:

public void setValue(String key, Object value) {
    if (key.equals("isNewUser"))
        editor.putBoolean(key, (Boolean) value);
    if (key.equals("isNotificationEnabled"))
        editor.putBoolean(key, (Boolean) value);
    if (key.equals("userScore"))
        editor.putInt(key, (Integer) value);
    if (key.equals("userName"))
        editor.putString(key, (String) value);
    editor.apply();
}

这将编译并工作,但如果无法进行转换,则会抛出 ClassCastException。

答案 2 :(得分:1)

使用显式转换会起作用。但是你应该注意NPE

public void setValue(String key, Object value) {
    if (key.equals("isNewUser"))
        editor.putBoolean(key, (Boolean) value);
    if (key.equals("isNotificationEnabled"))
        editor.putBoolean(key, (Boolean) value);
    if (key.equals("userScore"))
        editor.putInt(key, (Integer) value);
    if (key.equals("userName"))
        editor.putString(key, (String) value);
    editor.apply();
}