【问题标题】:Assign property value with type conversion in Java在 Java 中使用类型转换分配属性值
【发布时间】:2013-05-23 06:56:17
【问题描述】:

在 Java 中通过类型转换将值分配给对象的属性的最佳方法是什么。

例如:年龄字段为整数的 Person 类。如果以下语句必须将整数 21 分配给年龄字段,那么 set 方法的实现应该是什么? [注意:21 作为字符串传递]

ObjectUtils.set(person, "age", "21");

一种方法是获取字段的类型并显式地进行类型转换。有没有更好的方法或库实用程序来实现这一点?

【问题讨论】:

  • 如果您允许使用 3rd 方 jars,那么 BeanUtils 在 Apache 的 commons-beanutils.jar 中是很好的。否则你必须使用 Java Reflection API 重新发明轮子

标签: java object reflection type-conversion


【解决方案1】:

看看BeanUtils.setProperty()

设置指定的属性值,根据需要进行类型转换以符合目标属性的类型。

【讨论】:

  • Apache commons 总是值得一看...很高兴我能帮上忙 :)
  • 完美。问题的准确解决方案。谢谢。
【解决方案2】:

您可以使用reflexion

使用this 可以动态获取属性类型,如下所示:

Person p = ...; // The object you want to inspect
Class<?> c = p.getClass();

Field f = c.getDeclaredField("age");
f.setAccessible(true);

String typeOfAge = (String) f.getType(p);

拥有属性类型后,很容易转换值。

【讨论】:

  • 谢谢斯蒂芬,很高兴知道这件事。
【解决方案3】:

在您的 set 方法中使用 Integer.parseInt(String)。确保捕获无效号码的异常。这是 parseInt 的 hte javadoc

parseInt

public static int parseInt(String s) throws NumberFormatException 解析字符串 参数作为有符号十进制整数。字符串中的字符 必须都是十进制数字,除了第一个字符可能是 ASCII 减号 '-' ('\u002D') 表示负值。这 返回结果整数值,就像参数和 基数 10 作为 parseInt(java.lang.String, int) 方法。参数: s - 一个包含 int 的字符串 要解析的表示返回: 表示的整数值 十进制参数。抛出: NumberFormatException - 如果字符串 不包含可解析的整数。

【讨论】:

  • 他想动态获取类型:)
猜你喜欢
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 2021-06-17
  • 2023-02-11
  • 2020-12-27
相关资源
最近更新 更多