我应该在类实现中使用getter和setter吗?

时间:2014-09-11 12:41:06

标签: java

还是取决于?

例如虚构的类:

public class Worker {

    private boolean paused;

    public boolean isPaused() {
        return paused;
    }

    public void onIteration() {
        if (!paused) {
            doIteration();
        }
    }

}

或者如果我在上面的示例中使用if isPaused() { }会更好吗?

关于我一直必须使用的内容,是否有任何规则?

2 个答案:

答案 0 :(得分:3)

我会使用 getter ,因为它决定了内部逻辑。在你的情况下,没有太多的逻辑,你只需返回值。

但请考虑将isPaused更改为:

的情况
public boolean isPaused() {
   return isReallyPaused(paused);
}

我更喜欢使用 getters 的另一个原因,

如果是int,我就不会错误地更改它,而不是写if(myInt == 5)(错误地可能是=),我会使用if(getMyInt() == 5)

答案 1 :(得分:1)

一般来说,总是使用吸气剂。 为什么?

让我们说你把它变成了一个公共成员,在这个课程的5次使用之后,你决定现在需要为此添加更多的逻辑。

现在它只在A和B时暂停 也许用户没有权限查看isPauesd是真还是假。

如何在不破坏班级外部用法的情况下改变这种情况?

你不能,但如果你使用吸气剂那么它不是问题:

public boolean isPaused() {
    if (hasPermissions){
       return isPaused;
    }

    throw newPermissionException();
}

我改变了代码而没有破坏用法。 事实上,这个班级的用户甚至不知道这种变化。

这称为封装。