【发布时间】:2011-04-23 09:42:00
【问题描述】:
我有用户类,它有不同的对象,如国家、地址、汽车和许多其他对象。 所有嵌入的对象都有很长的用户标识属性。我有 User 对象,我想使用 java 反射将所有嵌入对象的 userid 属性设置为特定值或 null。 否则我必须为每个不同的对象编写方法。
【问题讨论】:
标签: java reflection properties
我有用户类,它有不同的对象,如国家、地址、汽车和许多其他对象。 所有嵌入的对象都有很长的用户标识属性。我有 User 对象,我想使用 java 反射将所有嵌入对象的 userid 属性设置为特定值或 null。 否则我必须为每个不同的对象编写方法。
【问题讨论】:
标签: java reflection properties
您可以使用Apache Common's ReflectionUtils 和 BeanUtils 类来帮助您。 ReflectionUtils 有几个辅助方法可以帮助发现您感兴趣的属性,而 BeanUtils 有辅助方法来填充属性/字段的值。
【讨论】:
除非有特定原因使用反射,否则最好不要使用它。
如果您正在寻找使用反射是因为它很方便或者需要更少的代码行/使代码可读,那么请注意这不是真的。
通常,反射代码的可读性较差,使用正常调用方法的方式几乎总是更好。
当你的方法名称只在运行时知道(通过属性文件或其他东西)时,反射是合适的
如果出于任何原因,您需要反思,请参阅this。
【讨论】:
如果我以正确的方式理解任务,您可以不加思索地完成。
abstract class Embedded {
private static final Set<Integer> obj = ...;
{
//init obj
}
protected Embedded(int id){
set.add(id);
}
public static Set<Integer> getAllIDs(){
return obj; //return copy or immutable collection
}
}
【讨论】: