我想知道更改/检查值的最佳方法是什么。例如,如果我有以下代码:
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;
}
}
你在哪里使用原始值?
答案 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”。