getDeclaredField(String)与bean中私有字段的getMethod(String)

Viv*_*ath 5 java reflection getmethod

我有一个bean,我想通过反射访问它的属性.我以字符串形式接收属性名称.bean具有私有字段的getter方法.

我目前正在使用该字段getDeclaredField(fieldName),通过使用setAccessible(true)然后使用它来检索其值来访问它get.

另一种方法是将字段名称大写并添加get到它的前面,然后从类中获取该名称的方法,最后调用该方法以获取私有字段的值.

哪种方式更好?

编辑

也许我应该用"更好"来解释我的意思......通过"更好",我的意思是在最佳实践意义上.或者,如果有任何微妙的警告或差异.

Pet*_*ans 1

这取决于您的使用,但一般来说,我更喜欢使用 getter,因为这是“正常”方式,并且在更多情况下会完成类开发人员期望完成的事情。

原则上,如果类的开发人员已将该字段设为私有,他可以自由地做他想做的事,例如,如果可以通过其他方式计算,则稍后将其删除。然后现场访问就会中断,希望是立即中断,如果你不幸 3 个月后没人记得的话。

请注意,有一个像 apache commons BeanUtils 这样的库(我相信 Spring 中也有一个)可以为您执行此操作并提供更合理的接口,例如哈希映射。