唯一的方法是自己创建一个类型转换器并使用它。
例如。
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() );