Java 使用私有成员或公共访问器的方法

Java 使用私有成员或公共访问器的方法,java,coding-style,Java,Coding Style,我意识到这可能无法回答,但我正在寻找是否有某种指导,关于在类方法内直接使用私有成员还是使用公共访问器 例如,考虑下面的代码(在java中,但C++中看起来非常相似): printDimensions()函数演示了两种获取相同信息的方法,[A]使用私有成员(this.numRows,this.numCols)或[B]通过访问器(this.rows(),this.cols()) 一方面,您可能更喜欢使用访问器,因为您无法无意中更改私有成员变量的值。另一方面,您可能更喜欢直接访问私有成员,希望这样可以

我意识到这可能无法回答,但我正在寻找是否有某种指导,关于在类方法内直接使用私有成员还是使用公共访问器

例如,考虑下面的代码(在java中,但C++中看起来非常相似):

printDimensions()
函数演示了两种获取相同信息的方法,[A]使用私有成员(
this.numRows,this.numCols
)或[B]通过访问器(
this.rows(),this.cols()

一方面,您可能更喜欢使用访问器,因为您无法无意中更改私有成员变量的值。另一方面,您可能更喜欢直接访问私有成员,希望这样可以删除不必要的函数调用


我想我的问题是,这是事实上的标准还是更受欢迎?

这是一种风格的呼唤。我更喜欢使用访问器,因为IMHO函数调用开销足够小,在大多数情况下都无关紧要,而且这种用法保留了数据抽象。如果我以后想更改数据的存储方式,我只需要更改访问器,而不是查找我接触变量的所有位置


不过,我对此感觉并不强烈,如果我认为我有充分的理由,我会打破这个“规则”。

我有其他对象,包括对象的子类,使用访问器,但让对象本身使用字段。这样,内部结构和与世界其他地方的接口之间就有了明确的区别。对类本身隐藏其内容似乎是不必要的,而且可能会造成混乱。如果某个对象的实现从对象的其他部分隐藏中真正受益,那么将其分解为一个单独的对象。

IMHO,访问器更多的是结构和数据管理问题,而不是访问器本身。有时,您需要在返回某些数据之前对其进行预处理。想想这个例子:

public class Foo {

    private List<Bar> bars = null;

    //Methods and stuff

    public List<Bar> getBars() {
        if(bars == null)
            bars = SomeClass.loadBars();
            // You can also use 
            // setBars(SomeClass.loadBars());
        return bars;
    }

}
公共类Foo{
私有列表条=空;
//方法和材料
公共列表getbar(){
如果(条==null)
bars=SomeClass.loadBars();
//你也可以使用
//立根(SomeClass.loadBars());
返回杆;
}
}
在本例中,getter不仅包装字段,而且在调用时返回初始化字段。在类中使用访问器的好处与外部人员相同,您可以从字段的特定细节中提取自己,并在处理后获得它

另一方面,如果直接返回字段(比如字符串),则使用get与否无关紧要,但您可能希望使用get来遵守代码中的标准


<>最后,归结为编码风格。

代码是java,不是C++,删除标签。无论如何,问题可能比java或C++更不可知语言……这一点是宗教性的。我认为没有标准。我会在任何可能的情况下离开<代码> .<代码> >。我同意它是语言不可知的,这就是为什么我最初包含C++,以不将问题的范围限制到java.另一个例子的可能副本是如果使类线程安全,并且<代码>行< /代码>需要以某种方式访问(例如,用一个锁保持).@assylias,如果您想从锁内部访问多个变量,这将不会有帮助。
public class Foo {

    private List<Bar> bars = null;

    //Methods and stuff

    public List<Bar> getBars() {
        if(bars == null)
            bars = SomeClass.loadBars();
            // You can also use 
            // setBars(SomeClass.loadBars());
        return bars;
    }

}