我可以像下面的例子一样传递未定义的参数吗:
//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 种方法工作?
答案 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();
}