【发布时间】:2010-12-12 09:04:45
【问题描述】:
编辑:这已经解决了。感谢所有帮助过的人。在将对象转换为正确的包装类后调用该方法。但是 String.valueOf() 实现同样的效果要简单得多。
你好--
我正在尝试做的事情甚至可能是不可能的。我现在已经花了几个小时研究和试验各种东西,所以我想我最终会四处打听,看看是否有人知道这是否可能。
是否可以使用反射将未知类型的原始类型的包装器动态转换为原始类型?
我基本上是在尝试创建一个通用的 toString 函数,它可以处理任何类型的原语到字符串的转换。这样一个看似简单的事情却是令人沮丧的困难(我知道我可以测试每种类型以查看它是否属于 Wrapper.class 类型并专门对其进行转换,但此时我只是出于固执而追求这一点)。
以下会引发 ClassCastException。 primClass 类似乎是正确的(打印 primClass.getName() 时给出“int”)。
private String toString(Number obj){
String result = "";
try{
Class objClass = obj.getClass();
Field field = objClass.getDeclaredField("TYPE");
Class primClass = (Class)field.get(obj);
Method method = objClass.getMethod("toString", new Class[]{primClass});
Object args = new Object[]{primClass.cast(obj)};
result = (String)method.invoke(null, args);
}catch(Exception ex){
//Unknown exception. Send to handler.
handleException(ex);
}
return result;
}
所以我有点不知所措,真的。有人有想法么?任何帮助将不胜感激。
【问题讨论】:
-
toStringDouble, Long, ...上的方法不符合您的要求?
标签: java reflection dynamic casting primitive