【发布时间】:2010-05-30 14:12:17
【问题描述】:
我正在通过反射设置 Object this 的公共字段。字段名称和值都以String 给出。我使用了几种不同的字段类型:Boolean、Integer、Float、Double、一个自己的enum 和一个String。
它适用于所有这些String 除外。抛出的异常是不存在具有签名String.valueOf(String) 的方法...现在我使用肮脏的instanceof 解决方法来检测每个字段是否是字符串,在这种情况下只需将值复制到字段。
private void setField(String field, String value) throws Exception {
Field wField = this.getClass().getField(field);
if(wField.get(this) instanceof String){ //TODO dirrrrty hack
//stupid workaround as java.lang.String.valueOf(java.lang.String) fails...
wField.set(this, value);
}else{
Method parseMethod = wField.getType().getMethod("valueOf", new Class[]{String.class});
wField.set(this, parseMethod.invoke(wField, value));
}
}
任何想法如何避免这种解决方法?
你认为java.lang.String应该支持valueOf(String)这个方法吗?
谢谢。
【问题讨论】:
-
值得一提的是,所有这些对象(枚举除外)都有一元字符串构造函数。因此,您可以切换到在所有情况下都使用它们,并且仅将
valueOf用于您的枚举,如果这看起来更干净的话。
标签: java string reflection value-of