2014-02-19 67 views
1

我有這個我創建的大類,作爲我爲家庭作業獲得的一個項目的一部分。
該類包含數據成員以及一些方法,現在我需要創建另一個(幾乎)相同的類。
它幾乎是相同的,因爲唯一的區別是代碼中出現的常數。Java:需要一些關於代碼重用的建議

例如,如果原始類有:

for (int i=0; i<8; i++) { 
    for (int j=0; j<8; j++) { 
     labels[i][j]=new Label(panel, SWT.SHADOW_OUT); 
     labels[i][j].setImage(empty); 
    } 
} 

新類應具備:

for (int i=0; i<10; i++) { 
    for (int j=0; j<10; j++) { 
     labels[i][j]=new Label(panel, SWT.SHADOW_OUT); 
     labels[i][j].setImage(empty); 
    } 
} 

,如果原來的類有:

labels=new Label[8][8]; 

新類應該有:

labels=new Label[10][10]; 

這意味着唯一的區別是代碼是8而不是8。

我可以在這裏重用代碼的方式?
有沒有人有一些想法?

+0

爲什麼不把這個類取值作爲參數,然後使用它作爲一個變量? – devshorts

+0

也許試圖把它放在類構造函數初始化的字段中?例如: '公共Clazz(最終整數大小){ this.size = size; }' –

+3

你應該讓你的新課程擴展現有的課程,並覆蓋方法。在第二個音符上,幻數吸引...定義可以在其他實現中更改的常量。 –

回答

5

只需使用類屬性:

public class MyClass { 
    private final int labelsSize; 
    private final Label[][] labels; 
    public MyClass(final int labelsSize) { 
     this.labelsSize = labelsSize; 
     this.labels = new Label[labelsSize][labelsSize]; 
    } 
    // ... 
    for (int i=0; i<labelsSize; i++) { 
     for (int j=0; j<labelsSize; j++) { 
      labels[i][j]=new Label(panel, SWT.SHADOW_OUT); 
      labels[i][j].setImage(empty); 
     } 
    } 
} 
+0

太好了,謝謝!沒有意識到Java允許這樣做。 雖然有一個問題:你爲什麼把標籤標記爲最終?因爲我在代碼中無法承受...... :( –

+1

)如果您有意在課程的結構中分配一次,並且以後再也不重新分配,那麼最好標記爲final。 。 –

2

您可以傳入該數字(8或10)作爲此方法的參數,或作爲構造函數的參數。然後將其設置爲實例變量並在此代碼中訪問它。

相關問題