我有一点怀疑。 反正有没有在运行时获取对象?
这样的事情: 我有一个班级说雇员,并有以下属性名称,addrees,id
现在我有一个Employee的对象,但我必须根据特定条件获得其中一个属性。
因此在运行时可能是emp.getName()或emp.getID()。
我如何实现这一目标?
此致 阿米特
答案 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),你可能真的想要它们中的一些是整数,日期等。在这种情况下,有几个选项:
调用者必须知道类型和解析。例如,Map将Date作为字符串存储,“01/23/1967”,调用者知道KEY_BIRTHDAY应该转换为Date,但是您有实用程序代码,调用者可以使用它将其转换为Date。
或者Map知道类型,可能通过另一个Map<String, Class>
知道每个值的类,并且Map执行转换。