2014-09-11 32 views
2

或者它取决于?我应该在类实现中使用getter和setter吗?

例如虚构类:

public class Worker { 

    private boolean paused; 

    public boolean isPaused() { 
     return paused; 
    } 

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

} 

或者它会更好,如果我在上面的例子中使用if isPaused() { }

是否有关于我总是必须使用的规则?

+0

您可以同时使用两种方式,但如果它正在做一些额外工作(除了刚刚返回暂停状态),您应该使用'isPaused'。 – 2014-09-11 12:43:41

+2

由于Worker可以被子类化,并被重写,所以最好使用isPaused(),除非重写这个功能是错误的,在这种情况下,你应该让isPaused final – ControlAltDel 2014-09-11 12:44:45

回答

3

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

但考虑在isPaused将改为一个情况:

public boolean isPaused() { 
    return isReallyPaused(paused); 
} 

另一个原因,我更喜欢使用干将

如果它是一个int,我不会采取改变的机会它错了,而不是写if(myInt == 5)(可能是=错误),我会用if(getMyInt() == 5)

1

那么作为一个规则总是使用getters。 为什么?

可以说你已经成为了一个公共成员,并且在这个类的5个用法之后,你决定现在你需要添加更多的逻辑来解决这个问题。

现在只有在A和B时才暂停。 也许用户没有权限查看isPauesd是true还是false。

如何在不打破课堂外部使用的情况下改变这一点?

你不能,但如果你使用一个getter那么它不是问题:

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

    throw newPermissionException(); 
} 

我是一个打破惯例改变了代码。实际上,这个类的用户甚至不知道这个变化。

这被称为封装。

+0

_让你说它是public_ + _这叫做encapsulation._ - 但我写了关于在**类**实现**内使用**,**不在外面**。 – 2014-09-11 13:03:54

相关问题