我有一个bean,我想通过反射访问它的属性。我以字符串形式接收属性名。beans对于它们的私有字段有getter方法。
目前,我正在使用getDeclaredField(fieldName)
获取字段,通过使用setAccessible(true)
访问该字段,然后使用get
检索其值。
另一种方法是将字段名大写,并将get
添加到字段名的前面,然后从类中获得该名称的方法,最后调用该方法来获取私有字段的值。
哪条路更好?
编辑
也许我该解释一下我所说的“更好”是什么意思.所谓“更好”,我指的是最佳实践的意义。或者,如果有任何微妙的警告或差异。
发布于 2010-09-03 16:08:32
这取决于您的使用,但总的来说,我更喜欢使用getter,因为这是“正常”的方式,并且在更多的情况下,将完成类的开发人员期望的事情。
原则上,如果类的开发人员将字段设置为私有的,那么他可以随意地做他喜欢做的事情,例如,如果可以用另一种方式进行计算,则可以在稍后删除它。然后,现场访问将中断,希望立即,如果你是不幸的3个月后,当没有人再记得。
请注意,有一个类如(我相信在Spring中也有一个库)这样的库,它为您提供了一个更正常的接口,例如哈希图。
发布于 2010-09-03 16:12:40
您可能想看看Introspector
类,它是一个很好的包装器,如果您只想处理已经公开的属性,您可以获得一个BeanInfo
对象,然后调用getPropertyDescriptors()
,例如:
final BeanInfo info = Introspector.getBeanInfo(clazz);
for (PropertyDescriptor prop : info.getPropertyDescriptors()) {
final Method read = prop.getReadMethod();
if (read != null) {
// do something
}
}
发布于 2010-09-03 16:11:49
可能使用getter方法,因为除了返回属性的值外,它可能还有其他行为。但是,这取决于类。
https://stackoverflow.com/questions/3637521
复制相似问题