更改/检查值的更好方法是什么?

时间:2013-12-03 19:47:57

标签: java

我想知道更改/检查值的最佳方法是什么。例如,如果我有以下代码:

public class Test{
    private int test1;

    public void checkValue(){
        setTest1(10);
        if(getTest1() <= 20){
            setTest1(30);
        }
    }
    public void setTest1(int test1){
    this.test1 = test1;
    }
    public int getTest1(){
    return test1;
    }
}

使用getter和setter的情况会更好吗?或者这更好:

public class Test(){
    private int test1 = 10;
    public void checkValue(){
    if(test1 <= 20){
    test1 = 10;
    }
}

你在哪里使用原始值?

3 个答案:

答案 0 :(得分:1)

我认为在同一个类中使用getter和setter是没有意义的。 getter和setter的主要目的是提供可扩展性和稳定的接口,但是在类本身内部,不需要依赖外部接口来改变一些内部字段。

所以我为此投票(if是多余的,字段应该是私有的):

public class Test{
    private int test1;

    public void changeValue(){
        test1 = 30;
    }
    public void setTest1(int test1){
        this.test1 = test1;
    }
    public int getTest1(){
        return test1;
    }
}

答案 1 :(得分:0)

在类没有不变量的简单情况下,我建议直接在方法中处理私有字段,因为代码更清晰。

但是如果你确实有不变量,即某些字段的值限制了其他字段可能有或没有的值,那么最好使用setter来确保维护不变量。

当value是素数时,boolean prime为true的简单示例:

class Test {
    private boolean isPrime;
    private int value;

    public void setValue(int value) {
      this.isPrime = isNumberPrime(value);
      this.value = value;
    }

    public void addOneWithSetter() {
       setValue(getValue()+1); //doing it this way means we don't forget to calculate
                               //isPrime, so invariance is maintained
    }

    public void addOneWithoutSetter() {
       value = value+1;   //oops! forgot to set isPrime, so now invariance is broken
    }

    //getters...
}

无论哪种方式,我都不建议公开字段,所以在上面的代码中,test1应该是

private int test1;

答案 2 :(得分:0)

我的老师告诉我,如果我的价值观(我的意思是田地)不是私人的,他会杀了我。 如果你真的需要它,只能使用setter。如果要从其他类访问值,请使用getter。 你的构造函数错误删除“class”。