唯一的方法是自己創建一個類型轉換器並使用它。
例如,
Map<String, Object> config = new HashMap<String, Object>();
Converter c = new Converter();
<T> T getProperty(String propertyName, T defaultValue) {
final Object value = this.config.get(propertyName);
return value == null ? defaultValue : (T) c.convert(value, defaultValue.getClass());
}
class Converter {
<T> T convert(Object value, Class<T> targetClass) {
if (targetClass.equals(Boolean.class)) {
if (value.equals("true"))
return (T) Boolean.TRUE;
else
return (T) Boolean.FALSE;
} else if (targetClass.equals(String.class)) {
return (T) value.toString();
}
// add more type-specific converters here
return (T) value; // no type-specific converters, just trying our luck
}
或者,保持類型安全,替換過去的回報:
if (value.getClass().isAssignableFrom(targetClass))
return (T) value; // no type-specific converters, but cast is safe
else
throw new ClassCastException(value.getClass().getName()
+ " cannot be cast to " + targetClass.getName());
如果該屬性是一個字符串,你想一個布爾值?不能只是轉換這兩個。另外,你的意思是在代碼片段中使用'propertyName'而不是'key'? –
是的,這是片段中的'關鍵'。已糾正它。是的,屬性值總是一個字符串(我不知道爲什麼它作爲一個對象返回),但我想將其轉換爲我的請求類型。所以我會說getProperty(「enable」,false),並獲取定義的字符串值(「true」或「false」)爲布爾值。 –
在java中沒有這樣的全局轉換機制。你可以自己創造,但是你必須考慮每一種類型(永遠是類)。 –