获取在运行时之前名称未知的属性

时间:2012-04-23 17:20:37

标签: java

我有一点怀疑。 反正有没有在运行时获取对象?

这样的事情: 我有一个班级说雇员,并有以下属性名称,addrees,id

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

因此在运行时可能是emp.getName()或emp.getID()。

我如何实现这一目标?

此致 阿米特

3 个答案:

答案 0 :(得分: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 */
}

答案 1 :(得分:1)

如果您的对象符合来自apache的beanutils库的getter / setter命名的PropertyUtils.getProperty的JavaBeans约定,看起来它可以很好地完成工作,如this question中所述。

例如,您可以执行类似

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

处理嵌套属性。

答案 2 :(得分:0)

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

  1. 调用者必须知道类型和解析。例如,Map将Date作为字符串存储,“01/23/1967”,调用者知道KEY_BIRTHDAY应该转换为Date,但是您有实用程序代码,调用者可以使用它将其转换为Date。

  2. 或者Map知道类型,可能通过另一个Map<String, Class>知道每个值的类,并且Map执行转换。