java - 使用反射设置字段 - String 没有 valueOf(String) 方法

标签 java string reflection value-of

我正在通过反射设置 Object this 的公共(public)字段。字段名称和值都以 String 的形式给出。我使用了几种不同的字段类型:BooleanIntegerFloatDouble、一个自己的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) 方法吗?

谢谢。

最佳答案

如您所见,没有 String.valueOf(String)。但是,我不会认为您的实现是 hack,只是承认 JDK 类中的轻微不一致。

为了更稳健地将字符串转换为对象,您可以考虑使用 PropertyEditors ,它直接支持 String 到 Object 的转换——默认提供基本类型和 Strings 的实现。)然后你的 parse 方法将是一致的,并且可以扩展以处理不同的类型。更好的是 Commons Convert 中的转换类, 和 Spring 3 Type Converters ,因为它们完全专注于转换,而不是属性的 GUI 编辑。

关于java - 使用反射设置字段 - String 没有 valueOf(String) 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2938945/

相关文章:

java - 如何在 Java 的 TreeMap 的子类中使用 put()

java - 是否可以仅使用maven来运行selenium插件?

c# - 检索具有指定类型的字段的值

java - Eclipse Java堆空间

Java访问互联网搜索?

r - 在 R 中将语言对象转换为字符串

c++ - 括号之间的两个字符串在 C++ 中用逗号分隔

iOS 获取两个字符串之间的字符串

java - 创建以字符串形式出现的类的新实例并更新集合方法

reflection - 为什么反射不在Struct中设置属性?