【发布时间】:2015-05-22 05:18:51
【问题描述】:
在 Java 类中通常有很多 getter 和 setter 方法,每个数据模型类变量各有一个。我意识到许多 IDE 会为您创建这些,但我试图避免这种混乱,并且在我的类中没有所有这些方法。那么,有什么方法可以在类外部以只读方式访问变量(就像它是 public final 一样),同时在类或子类中保留写访问权限(就像它是私有的或受保护的一样)。
我想出的唯一伪解决方案是一个基类(或具有默认方法的接口),它有一个 get(String variableName) 方法,然后通过反射获取类的字段并返回适当的字段。缺点是要让它工作,变量必须是公共的,所以只有按照惯例它才能满足我的要求(因为在具有我想要访问的变量的扩展/实现类中,我只调用 get 方法在类之外,并且不实现 set 方法)。我不喜欢的主要一点是,如果变量名发生变化,get 方法的调用者不会导致编译器错误,因为变量名只是一个硬编码的字符串。
谁有更好的主意?
【问题讨论】:
-
是的。我有一个更好的主意 - 请不要这样做。 反射非常慢。如果没有设置器/获取器,你就破坏了封装以及抽象。如果你使用像 Spring 这样的框架,你将需要 setter。
-
你应该读一次
Effective java by Joshua Bloch。 -
如果你想避免混乱,那么除非你真的需要它们,否则不要编写 getter 和 setter。
-
难以避免大量吸气剂造成的混乱。你不需要太多的 setter,因为你应该尽可能让你的类不可变。
-
我推荐 Groovy。出于这个原因,我几乎专门将它用于数据对象。
标签: java oop reflection setter getter