我有一个类可以为50+以上的变量分配值。我不想为所有这些领域编写getter。我宁愿有一些方法可以报告哪些字段已赋值给它们,以及该值是什么。
我最初把这些私有化了,我知道反射基本上是私密的。此外,Securecoding.org还说明了这一点:
特别是,除非可以在不使用反射的情况下访问这些项,否则不得使用反射来提供对类,方法和字段的访问。例如,不允许使用反射来访问或修改字段,除非这些字段已经可以通过其他方式访问和修改,例如通过getter和setter方法。
我主要担心的是通过声明几十个实例变量(以及可能的getter)来破坏我的代码。在本项目的后期,我还将有两组需要声明的大型实例变量。我知道我可以通过一些聪明的地图和枚举减少getter的使用,但是,仍然需要解析几十个空值。有人可以建议另一种方式吗?
答案 0 :(得分:1)
我只知道4种访问类
字段的方法private
方式1和4超出了讨论范围。 这里的构造函数使用不方便,因为字段数量很大。
所以,方法的可能性。
您是否要使用bean约定或例如构建器模式取决于您,但如果您需要此类用于持久性或序列化为XML或JSON等,则至少需要getter。
现在,如果您只想在创建实例后验证它,您可以声明声明方法Validatable
的接口validate()
,并在您的对象准备就绪时调用它。但是,您必须为每个类实现和维护此方法。
替代方法是使用可用的验证框架之一。在这种情况下,您可以使用注释完成验证。你应该记住,在场景背后这样的框架使用反射。
以下是一些进一步阅读的链接:
http://commons.apache.org/proper/commons-validator/