如何从Object获取布尔值
我尝试了不同的方法来解决这个问题,但我无法修复它。 我试图获取在checkBox的此方法中传递的Object的布尔值:
public boolean onPreferenceChange(Preference preference, Object newValue) { final String key = preference.getKey(); referenceKey=key; Boolean changedValue=!(((Boolean)newValue).booleanValue()); //ClassCastException occurs here }
我明白了:
java.lang.ClassCastException:java.lang.String无法强制转换为java.lang.Boolean
你可以做类似的事情,而不是铸造它
Boolean.parseBoolean(string);
这是java中Boolean类的一些源代码。
// Boolean Constructor for String types. public Boolean(String s) { this(toBoolean(s)); } // parser. public static boolean parseBoolean(String s) { return toBoolean(s); } // ... // Here's the source for toBoolean. // ... private static boolean toBoolean(String name) { return ((name != null) && name.equalsIgnoreCase("true")); }
如您所见,您需要传递值为“true”的字符串,以使布尔值为true。 否则就是假的。
assert new Boolean( "ok" ) == false; assert new Boolean( "True" ) == true; assert new Boolean( "false" ) == false; assert Boolean.parseBoolean( "ok" ) == false; assert Boolean.parseBoolean( "True" ) == true; assert Boolean.parseBoolean( "false" ) == false;
从您发布的代码和您看到的结果来看,它看起来不像newValue是一个布尔值。 所以你试图转换为布尔值,但它不是一个,所以发生错误。
目前尚不清楚你要做什么。 理想情况下,你将newValue作为布尔值。 如果你不能这样做,这应该工作:
boolean newValue; if (newValue instanceof Boolean) { changedValue = newValue; // autoboxing handles this for you } else if (newValue instanceof String) { changedValue = Boolean.parseBoolean(newValue); } else { // handle other object types here, in a similar fashion to above }
请注意,此解决方案并不是非常理想,并且有点脆弱。 在某些情况下可以,但最好重新评估方法的输入,以使它们更清洁一些。 如果你不能,那么上面的代码将起作用。 这真的只有你可以在解决方案的背景下决定。
如果您知道Preference
是CheckBoxPreference
,那么您可以调用isChecked() 。 它返回一个boolean
,而不是Boolean
,但这可能足够接近。
以下是APIDemos设备管理示例(DeviceAdminSample.java)中的一些代码。
private CheckBoxPreference mDisableCameraCheckbox; public void onResume() { ... mDPM.setCameraDisabled(mDeviceAdminSample, mDisableCameraCheckbox.isChecked()); ... } public boolean onPreferenceChange(Preference preference, Object newValue) { ... boolean value = (Boolean) newValue; ... else if (preference == mDisableCameraCheckbox) { mDPM.setCameraDisabled(mDeviceAdminSample, value); reloadSummaries(); } return true; }
- 引起:java.lang.ClassCastException:java.sql.Timestamp无法强制转换为java.sql.Date
- ClassCastException在Hibernate / Spring 4升级后,无法将Proxy36强制转换为SessionImplementor
- 如何在java中将ArrayList转换为String ,Arraylist包含VO对象
- Hibernate – > ArrayList不能转换为Set
- readResolve无法正常工作? :出现了一个Guava的SerializedForm实例
- 在进行通用转换时,在generics方法中捕获ClassCastException
- 这有什么不对? 我得到一个java.lang.ClassCastException错误,但我看不出我出错的地方
- Android java.lang.ClassCastException:android.widget.RelativeLayout无法强制转换为android.widget.EditText
- Java:未选中从X转换为Y /如何实现castOrNull