2

说我有一些课:

public class A {
    private int val = 0;

    public int getVal() {
        return val;
    }

    public void addFrom(A otherA) {
        this.val += otherA.val;
        if (otherA.val > 0)
            otherA.val = 0;
        else
            otherA = Math.abs(otherA.val);
    }
}

我应该使用 getter 方法而不是使用 otherA 的 val 变量吗?这样做更好吗?

编辑:这是一个非常简化的类,需要很长时间才能阅读。但是假设正在进行延迟初始化,还有其他方法可以访问此类,等等。我已经更新了示例方法,以便这可能更清楚,但我希望很清楚我的问题涉及访问其他对象的变量,并且想知道对不是“this”的东西使用直接变量访问是否是失礼的。

4

4 回答 4

3

不,绝对不是。

当您在类的成员中时,您应该直接使用该变量,并在其他所有情况下使用 getter(当您收到错误时,因为val无论如何都是私有的)。

于 2012-11-14T20:33:37.667 回答
1

public int getVal()旨在将您的礼物(变量)放在一个盒子里给外界(封装)。你自己在盒子里送礼物吗?这很奇怪,所以按原样使用变量。

于 2012-11-14T20:34:55.043 回答
0

您可以使用变量,但当前代码无法编译。可能,返回应该是 int 而不是 boolean。

可能,您的意图是覆盖 Comparable 接口中的 compareTo 方法

于 2012-11-14T20:42:59.270 回答
0

添加不必要的 getter 会显示内部结构,这是增加耦合的机会。

真正封装良好的类没有 setter,最好也没有 getter。与其向一个类请求一些数据然后用它计算一些东西,这个类应该负责用它的数据计算一些东西然后返回结果。

使用访问器来限制对字段变量的直接访问优于使用公共字段,但是,为每个字段创建 getter 和 setter 是多余的。不过,这也取决于具体情况,有时您只需要一个哑数据对象。应该为真正需要它们的字段添加访问器。一个类应该暴露碰巧使用其状态的更大行为,而不是由其他类操作的状态存储库。

于 2012-11-14T20:58:02.477 回答