我有一个小小的疑问。无论如何要在运行时获取对象吗?
像这样:我有一个类说 Employee 并具有以下属性名称,地址,id
现在我有一个 Employee 对象,但我必须根据特定条件获得其中一个属性。
所以它可能是运行时的 emp.getName() 或 emp.getID() 。
我如何实现这一目标?
问候, 阿米特
我有一个小小的疑问。无论如何要在运行时获取对象吗?
像这样:我有一个类说 Employee 并具有以下属性名称,地址,id
现在我有一个 Employee 对象,但我必须根据特定条件获得其中一个属性。
所以它可能是运行时的 emp.getName() 或 emp.getID() 。
我如何实现这一目标?
问候, 阿米特
如果您的对象符合用于 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);
处理您的嵌套属性。
尝试
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 */
}
如果有数百个属性(正如您在评论中提到的),那么一种选择是将它们全部存储在Map<String, SomeType>
. 访问非常简单,为密钥传递一个字符串(或枚举)。主要缺点是它们的值都是 SomeType(实际上可能是 String),您可能真的希望它们中的一些是整数、日期等。在这种情况下,有几个选项:
调用者必须知道类型和解析。例如,地图将日期存储为字符串“01/23/1967”,调用者知道 KEY_BIRTHDAY 应该转换为日期,但您有调用者用来将其转换为日期的实用程序代码。
或者 Map 知道类型,可能通过另一个Map<String, Class>
具有每个值的类,然后 Map 进行转换。