使用反射访问私有字段以获取巨大的POJO:±1?

时间:2012-05-07 15:00:37

标签: java reflection pojo private-members

我刚刚发现任何对象的读写任何私有字段都可以在没有任何访问者的情况下完成,但使用反射

所以,我的问题是:如果应用程序不使用第三种技术(例如EL)而使用JAVA,如果我需要一个包含20个字段的POJO,那么实现40个访问器是否更有趣,或者用反射来访问它们?我猜一些优点和缺点,但任何经验或反馈都会很棒:)

4 个答案:

答案 0 :(得分:4)

可以,但它不会很难维护,所以:不要这样做。使用getter / setter访问成员的优点是,您可以隐藏访问器,初始化延迟,并且您将能够轻松地重构(例如使用IDEA或Eclipse)。

答案 1 :(得分:3)

通常最好通过getter访问您的字段,即使您使用反射来确定哪些字段可用。你可以很容易地通过反射找出可用的getter并调用那些getter方法。这允许您:

1)动态地找出可用的数据。

2)明确说明哪些字段应该可用,哪些字段应该是私有的。

3)明确覆盖getter的行为以满足您的需求。

在大多数正常情况下,反射用于确定对象上可用的数据。你应该使用反射作为getter和setter的一般替代品。否则,您的代码将变得真正无法维护。

答案 2 :(得分:3)

您可以使用反射访问对象字段和方法,但是不能

This文章至少列出了两个可衡量的原因:

  • 性能。使用反射访问对象方法/字段比通过访问器访问要慢。

  • 安全限制

  • 最大的缺点是不可维护性,引用下面的文章:

  

许多应用程序的一个更严重的缺点是使用反射   可以模糊代码中实际发生的事情。程序员   期望在源代码中看到程序的逻辑,并且   绕过源代码的反射等技术可以创建   维修问题。

答案 3 :(得分:1)

反射仅适用于特定用例,其中需要对对象进行魔术而不能对其结构进行大量假设。具体来说,如果您的JVM使用SecurityManager,则可能会阻止代码通过反射设置私有

您可以查看此other question以获取有关安全管理器的更多信息。