6

在类的内部代码中使用 getter/setter 而不是直接访问实例变量,这是好的做法还是坏的做法?至少对于 setter 来说,可以添加额外的代码来验证值,但对于 getter 来说,这只是开销?Java 编译器有多智能,如果我的 getter/setter 只是直接设置/获取值,Java 会优化我的代码并通过直接访问实例变量来替换 getter/setter,所以没有方法调用开销?

4

3 回答 3

7

直接访问该字段更为常见。对于在其他类中使用您的代码的程序员来说,setFieldName 方法的价值更为明显。由于隐藏了实现细节,他们可能无法意识到可以接受的值范围,因此保持字段私有并迫使其他开发人员通过 setter 是有意义的。但是在你自己的类中,使用 setter 的情况要弱得多。如果您查看 java API 的源代码,您会发现 getter / setter 方法通常不在类中使用。

于 2012-05-12T18:23:26.077 回答
7

没有必要在类中这样做,除非想在这些 getter / setter 中执行额外的操作。对类成员的访问可以在内部直接访问类,如:

  • 隐藏的原因主要是为了隐藏实现(并且没有必要对类本身隐藏实现)
  • getter 和 setter 直接访问成员,所以调用它们只是为了避免直接访问成员有点,嗯......多余的。

关于性能 - 老实说,我认为在大多数情况下,您不应该考虑它,您应该根据可读性、可扩展性和可维护性来决定是调用方法还是直接访问,而不是考虑是否需要另一个纳秒或不。从长远来看,这种方法是有回报的。有优化的地方,你应该有效率,但是一旦代码库超过 20 行,保持代码清晰和可维护就更重要了。

于 2012-05-12T18:14:55.627 回答
1

直接访问是一件好事。但是,在同一个类中,没有人可以说 getter/setter 访问是不好的。如果你正在开发一个Java bean,你肯定会明白我在说什么。认为您正在尝试将 JTextField 的用户输入作为字符串获取。在这种情况下,getter 方法将允许您做很多事情,包括字符串截断、修剪、大写、小写等。如果您只是通过访问直接变量(例如:String s = textField.getText ()),你会发现很难做到。所以,我认为,好或坏取决于情况和你正在开发的东西

于 2012-05-12T19:29:17.007 回答