首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于bean中私有字段的getDeclaredField(String)与getMethod(String)

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

Stack Overflow用户
提问于 2010-09-03 16:02:54
回答 4查看 2.1K关注 0票数 5

我有一个bean,我想通过反射访问它的属性。我以字符串形式接收属性名。beans对于它们的私有字段有getter方法。

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

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

哪条路更好?

编辑

也许我该解释一下我所说的“更好”是什么意思.所谓“更好”,我指的是最佳实践的意义。或者,如果有任何微妙的警告或差异。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-03 16:08:32

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

原则上,如果类的开发人员将字段设置为私有的,那么他可以随意地做他喜欢做的事情,例如,如果可以用另一种方式进行计算,则可以在稍后删除它。然后,现场访问将中断,希望立即,如果你是不幸的3个月后,当没有人再记得。

请注意,有一个类如(我相信在Spring中也有一个库)这样的库,它为您提供了一个更正常的接口,例如哈希图。

票数 1
EN

Stack Overflow用户

发布于 2010-09-03 16:12:40

您可能想看看Introspector类,它是一个很好的包装器,如果您只想处理已经公开的属性,您可以获得一个BeanInfo对象,然后调用getPropertyDescriptors(),例如:

代码语言:javascript
运行
复制
final BeanInfo info = Introspector.getBeanInfo(clazz);
for (PropertyDescriptor prop : info.getPropertyDescriptors()) {
    final Method read = prop.getReadMethod();
    if (read != null) {
        // do something
    }
}
票数 2
EN

Stack Overflow用户

发布于 2010-09-03 16:11:49

可能使用getter方法,因为除了返回属性的值外,它可能还有其他行为。但是,这取决于类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3637521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档