唯一的方法是自己创建一个类型转换器并使用它。
例如,
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中没有这样的全局转换机制。你可以自己创造,但是你必须考虑每一种类型(永远是类)。 –