2013-07-09 25 views
0

我想將盡可能多的可重複代碼移入基類,但我發現自己需要將派生類中的變量傳回基類。什麼是可接受的方式來設置傳遞參數到基類?

myClass必須有一個無參數初始化方法,並通過myInterface.setup()「設置」。

我怎麼能強制myBase擴展器設置變量,而不必檢查他們是從someBaseMethod()

interface myInterface 
{ 
    void setup(String myStr); 
    void someBaseMethod(); 
} 

abstract class myBase implements myInterface 
{ 
    String myStr = null; 

    protected abstract String getMyStr(); 

    // called lots of times. 
    public void someBaseMethod() 
    { 
     if (myStr == null) myStr = getMyStr(); 

     // ... 
    } 
} 

class myClass extends myBase 
{ 
    String s = null; 

    public void setup(String myStr) 
    { 
     s = myStr; 
    } 

    protected String getMyStr() 
    { 
     return s; 
    } 
} 
+1

我會在基類的構造函數中使用一個參數。這樣,每個子類都必須先設置它,然後才能實例化。 –

+0

通用命名約定= CapTheFirstLetter – Dapeng

+0

@CarlosGavidia無法做到這一點,因爲我不知道該類實例化時的變量。 – Cheetah

回答

0

每次設定您可以在myBase類這表明S級正確添加boolean變量初始化。

E.g.

class MyBase { 
    private initialized = false; // Only for documentation as a bolean is always initialied to false 
    // further variables and methods 
} 

然後你只需要檢查變量:

if (initialized) { 
    // Do your stuff 
} else { 
    // Do some error handling 
} 

請注意,在Java中lasses通常用大寫字母初學者。

1

如果protected String getMyStr()在子類中實現並返回實現特定的字符串,則不應將其保留在基類中,如String myStr

只需創建一個局部變量:

public void someBaseMethod() { 
    final String myStr = getMyStr(); 
    ..... 

另外,如果你需要運行安裝程序方法之前別的,那麼你可能想有一個布爾標誌,指示字段設置。

0

你的代碼看起來很笨拙,你正在嘗試做什麼。你爲什麼不這樣做:

interface myInterface 
{ 
    void setup(String myStr); 
    void someBaseMethod(); 
} 

abstract class myBase implements myInterface 
{ 
    private String myStr = null; 

    protected String getMyStr() 
    { 
     return myStr; 
    } 

    protected void setMyStr(String value) 
    { 
     myStr = value; 
    } 

    // called lots of times. 
    public void someBaseMethod() 
    { 
     // do stuff with myStr 
    } 
} 

class myClass extends myBase 
{ 
    public void setup(String myStr) 
    { 
     setMyStr(myStr); 
    } 
} 

或者我明白你的要求錯了嗎?

+0

我明白你在說什麼,但擴展類不需要調用'setMyStr' ...我更喜歡他們有明確地調用它。 – Cheetah

+0

我不認爲有一種方法可以保證優雅。我的建議是寫出好的和出色的評論和測試,並依靠程序員的能力。 –

相關問題