如果我在 Java 中创建一个类,我总是被告知约定是将类的所有字段设为私有(private)。如果我需要访问或更改它们,我可以创建访问器和修改器方法。我确实理解私有(private)变量的重要性,因为它们有助于降低复杂性并允许封装。
我不明白的是,如果我创建一个公共(public)访问器和修改器方法,那么此时变量不是公开的吗?为什么在任何人都可以访问的情况下仍然习惯使用私有(private)变量?
我还应该指出,我理解这些方法的重要性,但我想知道为什么我们费心将变量设为私有(private),即使我们允许任何人通过这些方法访问它?
是的,你是对的,它确实有效地公开了变量。但有一个重要的区别,那就是它使您能够在以后进行更改:您可以根据需要删除 setter,或者将其设为私有(private),而不会影响使用 getter 从字段中读取的代码。
如果您只是将变量公开,您将无法在不中断对该字段的读取的情况下停止对该字段的写入。
它还有其他优点。例如,如果您以后想在不破坏客户端代码的情况下,可以使访问同步
。简而言之,它允许以后进行大量修改,如果不在使用该类的代码中造成大量破坏,否则这些修改是不可能的。
并且您可以添加额外的逻辑,在有人写入该字段时记录日志,或阻止某些线程写入,或其他任何...您可以将字段的类型从 HashMap
更改为TreeMap
如果您的 getter 将其抽象化并返回一个 Map
... 等等。