2012-05-07 67 views
2

我刚刚发现读写任何对象的私有字段都可以在没有任何访问者的情况下完成,但是使用的是反射。因此,我的问题是:对于不使用第三种技术(例如EL)而是使用JAVA的应用程序,如果我需要一个包含20个字段的POJO,实现40个访问器会更有趣,或者使用反射来访问它们?我想一些优点和缺点,但是任何经验或反馈将是巨大的:)使用大型POJO的反射访问私人领域:±1?

+7

http://www.quickmeme.com/meme/3p60cd/ –

回答

3

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

This文章列出了至少2个可测量的原因不是:

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

  • 安全限制

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

一个更严重的缺点,对于许多应用是使用反射 可以掩盖代码中实际发生了什么。程序员 期望在源代码中看到一个程序的逻辑,而诸如反射这样的技术绕过了源代码,可以创建维护问题 。

4

可以,但它不会是非常维护,因此:不要去做。使用getter/setter访问成员的优点是,您可以隐藏访问器,初始化懒惰,并且您将可以轻松地重构(例如,使用IDEA或Eclipse)。

+1

更不用提你有机会在通往私人之路的途中受到SecurityManager策略的影响...... – Romain

3

即使您使用反射来确定可用字段,通过getter访问您的字段通常也会更好。您可以轻松弄清楚通过反射可获得哪些获取器并调用这些获取器方法。这允许您:

1)动态确定可用的数据。

2)明确指出哪些字段应该可用,哪些字段应该是私人的。

3)显式重写getter的行为以满足您的需求。

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

1

反射仅适用于需要对对象做魔术而不能假设其结构的很多具体用例。具体而言,如果您的JVM使用SecurityManager,,则它可能会很好地防止代码通过反射设置私有。

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