2015-04-02 42 views
0

在我的三個實例變量中,這些變量都是最終的。但是,當我嘗試在setter方法中執行類似this.inputsRelated = inputsRelated的操作時,我得到一個可理解的錯誤,它說明最終字段無法分配。但是,設置方法中的方法/我應該如何處理方法public void setInputsRelated(boolean inputsRelated)public void setExpected(int expected)?提前致謝!涉及最終字段的setter方法的問題

public class ExceptionLogicParameters extends RuntimeException { 

    public final boolean inputsRelated; 
    public final int expected; 
    public final int found; 

    public ExceptionLogicParameters(boolean inputsRelated, int expected, int found) 
    { 
     this.inputsRelated = inputsRelated; 
     this.expected = expected; 
     this.found = found; 
    } 

    @Override 
    public String toString() 
    { 
     return "Get the the hell out of here!"; 
    } 

    public boolean getInputsRelated() 
    { 
     return this.inputsRelated; 
    } 

    public int getExpected() 
    { 
     return this.expected; 
    } 

    public int getFound() 
    { 
     return this.found; 
    } 

    public void setInputsRelated(boolean inputsRelated) 
    { 
     this.inputsRelated = inputsRelated; 
    } 

    public void setExpected(int expected) 
    { 
     this.expected = expected; 
    } 

} 
+3

如果這些字段是最終的,則這些方法不應該存在。必須在聲明或構造函數中設置最終字段。 – axblount 2015-04-02 17:32:44

+1

如果你想重新分配這些字段的值,爲什麼使用final? – 2015-04-02 17:33:18

+0

已解決!教授犯了一個錯誤,最終使實例變量。 – Inferno 2015-04-02 17:49:18

回答

2

如果這些字段是final,它們只能在變量聲明或構造函數中初始化。對於final字段,安裝員方法沒有意義。

您應該分析您的代碼並確定這些字段是否確實是最終的,如果是這樣的話,請丟棄setter方法。如果您確實需要創建setter,則必須刪除final修飾符。

+0

感謝您的快速回復,但我的指示是這樣的,我應該包括setters方法。 – Inferno 2015-04-02 17:34:59

+0

你不能同時做兩個。如果你真的需要創建setter,你應該刪除'final'修飾符。 – 2015-04-02 17:36:15

+0

已解決!教授犯了一個錯誤,最終使實例變量。 – Inferno 2015-04-02 17:49:12

0

你不應該爲最終實例變量設置setter,因爲你不能設置它們。要麼讓你的變量不是最終的或者移除setter。

0

您只能使用getter方法,如果最終沒有使用setter方法。如果想要提供setter,那麼沒有必要讓他們成爲final。

0

一旦你做了一個變量或引用最終你不允許改變它,編譯器會驗證這一點,並提高編譯錯誤,如果你嘗試重新初始化java中的最終變量。

在你的情況下,由於之前的變量最終聲明,mutator和accessor(set/get)方法是無用的。