2013-12-03 52 views
0

我想知道什麼是更改/檢查值的最佳方法。例如,如果我有以下代碼:更改/檢查值的更好方法是什麼?

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; 
    } 
} 

你在哪裏使用原始值?

+2

'公共類Test()'錯誤的語法。請編輯。 – Nishant

+3

您的問題就像我們應該使用GETTER/SETTER或直接FIELD。這取決於。如果你進行某種驗證(在安裝人員)或轉換(在安裝人員/獲得者),你應該在這裏使用Getter/setter。如果除了值集/值返回值以外,其他實例方法中不做任何操作,則可以使用DIRECTLY字段。在你的情況下,你可以使用第二種方法。 – Loc

+2

我一直認爲,如果對象將在代碼中的各個位置使用,則這些字段應始終保護或私有,並且只能通過獲取者/設置者訪問。它可以防止意外設置,並且以後可以在課堂中完全重構,而不是查找訪問。 – ddukki

回答

0

在類沒有不變量的簡單情況下,我會建議直接在方法中處理私有字段,因爲代碼更乾淨。

但是,如果您確實有不變量,即某些字段的值限制了其他字段可能具有或不具有的值,那麼最好使用setter來確保不變量保持不變。

簡單的例子,當值是質數布爾主要是真實的:

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; 
1

我不認爲在同一個類中使用getters和setter是有意義的。 getter和setter的主要目的是提供可擴展性和穩定的接口,但是在類內部,不需要依靠外部接口來改變某些內部字段。

所以我投這個(中頻是多餘的,現場應該是私有的):

public class Test{ 
    private int test1; 

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

我的老師告訴我,他會殺了我,如果我的值(我的意思是字段)是不是私人的。 如果你真的需要它,請使用setter。如果你想從其他類訪問一個值,使用getters。 而你的構造函數是錯誤的刪除「class」。

+0

我的構造函數? – user3047395

+0

public class Test(){...}不是你的構造函數嗎? – Fr0z3n7

相關問題