-2

我有一个小小的疑问。无论如何要在运行时获取对象吗?

像这样:我有一个类说 Employee 并具有以下属性名称,地址,id

现在我有一个 Employee 对象,但我必须根据特定条件获得其中一个属性。

所以它可能是运行时的 emp.getName() 或 emp.getID() 。

我如何实现这一目标?

问候, 阿米特

4

3 回答 3

1

如果您的对象符合用于 getter/setter 命名的 JavaBeans 约定,则来自 apache 的 beanutils 库的PropertyUtils.getProperty看起来可以很好地完成这项工作,如本问题所述。

例如,您可以执行类似的操作

String field = "name.lastname"; // or could be read dynamically from user input
Object value = PropertyUtils.getProperty(emp, field);

处理您的嵌套属性。

于 2012-04-23T17:44:13.347 回答
1

尝试

String str = (condition) ? emp.getName() : emp.getID();

或者

final String str;
switch(userSelectedField) {
   case "lastname": str = emp.getName().getLastName(); break;
   case "zipcode": str = emp.getCountry().getState().getZipCode(); break;
   default: /* report an error */
}
于 2012-04-23T17:24:13.010 回答
0

如果有数百个属性(正如您在评论中提到的),那么一种选择是将它们全部存储在Map<String, SomeType>. 访问非常简单,为密钥传递一个字符串(或枚举)。主要缺点是它们的值都是 SomeType(实际上可能是 String),您可能真的希望它们中的一些是整数、日期等。在这种情况下,有几个选项:

  1. 调用者必须知道类型和解析。例如,地图将日期存储为字符串“01/23/1967”,调用者知道 KEY_BIRTHDAY 应该转换为日期,但您有调用者用来将其转换为日期的实用程序代码。

  2. 或者 Map 知道类型,可能通过另一个Map<String, Class>具有每个值的类,然后 Map 进行转换。

于 2012-04-23T17:42:12.970 回答