使用getter访问私有实例变量是一种很好的编码实践吗?

Dee*_*pak 5 java coding-style

最近我得到了一个代码审查注释,使用getter方法访问同一类方法中的私有实例变量.这真的是一个好习惯吗?我觉得它在代码中添加了不必要的复杂功能.推荐的方式是什么?

public class SomeClass {
    String abc;

    public boolean compare(SomeClass otherClass) {
        otherClass.getAbc().equals(abc);
    }
}

public class SomeClass {
    String abc;

    public boolean compare(SomeClass otherClass) {
        otherClass.getAbc().equals(getAbc());
    }
}
Run Code Online (Sandbox Code Playgroud)

Jeu*_*arg 5

我看到你的第一种方法存在一个非常具体的问题.你不一致地使用getter.

public boolean compare(SomeClass otherClass) {
    otherClass.getAbc().equals(abc);
    //.getAbc() for one, but direct access for the other!!
}
Run Code Online (Sandbox Code Playgroud)

你必须比较一个equals方法的苹果和苹果,并且如果使用getter检索你的一个变量进行比较(我假设它是公共的并且可以被覆盖)而另一个直接从私有变量检索(不能是被覆盖的,然后你使你的代码比它需要的更脆弱.如果有人扩展你的课程并改变了getter方法怎么办?你的代码将被软管化.因此,在两者上使用getter或者不使用getter.

考虑到这一点,其中任何一个都比原来更好,因为行为更稳定:

public boolean compare(SomeClass otherClass) {
    otherClass.abc.equals(abc);
}


public boolean compare(SomeClass otherClass) {
    otherClass.getAbc().equals(getAbc());
}
Run Code Online (Sandbox Code Playgroud)

出于一般目的,它取决于您使用数据的方式.David的回答列出了一些吸气剂的一般用法资源.

您的审稿人完全有可能只谈论一般情况,但我认为他们可能只是很难沟通问题.