【发布时间】:2012-12-06 06:48:33
【问题描述】:
我有一个java.lang.reflect.InvocationHandler,我需要实现方法invoke()
根据我的阐述,我有一个 java.lang.String 类型的值,我需要将此值转换为方法所期望的适当 returnType(它可以是像 int、boolean、double 或像 Boolean、Integer 这样的包装类的原始类型,双,浮动等)。
例子:
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
String computedValue = compute(...);
return convert(method.getReturnType(), computedValue);
}
private Object convert(Class<?> returnType, String stringValue) {
return ...; // what's the simplest way?
}
我不希望简单地实现复杂对象之间的自动转换,但我希望有一种简单的方法来从 String 转换为标准 java 类型。
我已经(太)见过很多次这样的东西,但它似乎不适合我:
public static Object toObject( Class clazz, String value ) {
if( Boolean.class.isAssignableFrom( clazz ) ) return Boolean.parseBoolean( value );
if( Byte.class.isAssignableFrom( clazz ) ) return Byte.parseByte( value );
if( Short.class.isAssignableFrom( clazz ) ) return Short.parseShort( value );
if( Integer.class.isAssignableFrom( clazz ) ) return Integer.parseInteger( value );
if( Long.class.isAssignableFrom( clazz ) ) return Long.parseLong( value );
if( Float.class.isAssignableFrom( clazz ) ) return Float.parseFloat( value );
if( Double.class.isAssignableFrom( clazz ) ) return Double.parseDouble( value );
return value;
}
到目前为止,以上还不是我看到的最糟糕的:)
这里有什么秘诀吗?
【问题讨论】:
-
告诉我们:1. 为什么您的第一个示例不起作用,以及 2. “似乎不合适”是什么意思。
-
1.第一个示例不起作用,因为在 convert 方法中它缺少实现(这是这个问题的主题) 2. 似乎不合适意味着在我看来,由于许多 ifs,这个实现非常难看,我想有更好的方法来完成这项工作。
-
由于第二个示例 有效(但它很丑),codereview.stackexchange.com 可能是更好的选择。
-
谢谢@luiscubal,这是真的,它有效,但我不想在我的代码库中出现丑陋的东西;我看不下去了:)
-
我希望本机方法 isAssignableFrom() 将 == 检查作为第一个操作,因此您提出的改进应该不会有太大的不同。谢谢你的提示。我宁愿故意让丑陋的代码看起来更糟,作为以后替换它的纪念品(再次开玩笑)。
标签: java string object reflection type-conversion