在课堂上使用getter / setter - 好的还是坏的练习?

时间:2012-05-12 18:11:36

标签: java setter getter

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

3 个答案:

答案 0 :(得分:7)

除非要在这些getter / setter中执行其他操作,否则不需要在类中执行此操作。 对类成员的访问可以在内部直接指向类,如:

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:1)

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