我刚刚发现读写任何对象的私有字段都可以在没有任何访问者的情况下完成,但是使用的是反射。因此,我的问题是:对于不使用第三种技术(例如EL)而是使用JAVA的应用程序,如果我需要一个包含20个字段的POJO,实现40个访问器会更有趣,或者使用反射来访问它们?我想一些优点和缺点,但是任何经验或反馈将是巨大的:)
使用大型POJO的反射访问私人领域:±1?
回答
您可以使用反射访问对象字段和方法,但您应该而不是。
This文章列出了至少2个可测量的原因不是:
性能。使用反射访问对象方法/字段比通过访问器访问要慢。
安全限制
而最大的缺点是不可维护性,从下面的文章引述:
一个更严重的缺点,对于许多应用是使用反射 可以掩盖代码中实际发生了什么。程序员 期望在源代码中看到一个程序的逻辑,而诸如反射这样的技术绕过了源代码,可以创建维护问题 。
您可以,但它不会是非常维护,因此:不要去做。使用getter/setter访问成员的优点是,您可以隐藏访问器,初始化懒惰,并且您将可以轻松地重构(例如,使用IDEA或Eclipse)。
更不用提你有机会在通往私人之路的途中受到SecurityManager策略的影响...... – Romain
即使您使用反射来确定可用字段,通过getter访问您的字段通常也会更好。您可以轻松弄清楚通过反射可获得哪些获取器并调用这些获取器方法。这允许您:
1)动态确定可用的数据。
2)明确指出哪些字段应该可用,哪些字段应该是私人的。
3)显式重写getter的行为以满足您的需求。
在大多数正常情况下,反射用于确定对象上可用的数据。你应该而不是使用反射作为getter和setter的一般替代。否则,你的代码将变得真正难以维护。
反射仅适用于需要对对象做魔术而不能假设其结构的很多具体用例。具体而言,如果您的JVM使用SecurityManager
,,则它可能会很好地防止代码通过反射设置私有。
有关安全管理器的更多信息,您可以查看此other question。
- 1. Java:通过反射访问私人领域(行为)
- 2. 使用反射访问私人会员
- 3. 访问Java中的私人领域
- 4. 参考私人领域使用番石榴反射
- 5. hibernate如何访问私人领域?
- 6. Reflection.Emit私人领域/财产访问
- 7. 用反射找到一个私人领域?
- 8. 如何访问使用反射的私人基类字段
- 9. 不能设置内部类的私人领域使用java反射
- 10. 使用反射访问私人内部类字段
- 11. Junit的私人领域
- 12. INotifyPropertyChanged的带私人领域
- 13. 何时不使用私人领域?
- 14. 使用ProGuard混淆私人领域
- 15. 使用MSTest测试私人领域
- 16. 我怎样才能比较POJO他们的领域反射
- 17. 访问类模块中的私人领域
- 18. 私人领域不编译
- 19. 模式与私人领域
- 20. 私人领域是超
- 21. 嘲笑私人领域
- 22. 休眠:错误访问领域的私人java.lang.Integer中]通过反射的持久化属性
- 23. Vb.Net作用域的问题 - 私人领域
- 24. 非法反射访问$ 1
- 25. 为什么可以访问私人领域?
- 26. 如何访问和改变斯卡拉私人领域?
- 27. 私人领域的多个模型,如何使RoR?
- 28. ReflectionUtils和BeanUtils用于私人领域
- 29. 更好地使用反射或我的小黑客访问私人方法?
- 30. 私人领域的垃圾收集
http://www.quickmeme.com/meme/3p60cd/ –