2014-09-19 75 views
0

我有一個具有不同變量的類,用戶定義的枚舉也是其中之一。 該類基本上代表表中的數據。枚舉的Java設計問題

例如)

Class A { 

    private String x; 
    private String y; 
    private UserEnum z; 
    .... 
    .. 

    private UserEnum getField() { 
    .... 
    } 

    private void addRow() { 
    // uses the UserEnum here 
     ....   
    } 

}

我有一個其他的類(CLASS B)來完成相同的功能的類A(具有不同的是我有不同的相同的方法和字段)用戶定義的枚舉(例如UserEnum2)。 這兩個枚舉都有不同的一組常量。

什麼是良好的設計,以避免在這兩個類中存在重複的代碼。 我是新來的枚舉,我不知道我們怎麼能真正概括上面提到的兩個類(A類和B類),它有不同的枚舉。

回答

0

代表團。將重複的方法委託給一個委託類,並且所有3個類(2枚枚舉和委託)都實現了那些重複方法的接口。

2

創建與公共領域和methos一個基類,然後用字段和方法的其餘部分創建子類/

Class abstract Base { 

    private String x; 
    private String y; 
    .... 
    .. 

    private UserEnum getField() { 
    .... 
    } 

    private abstract void addRow(); 
} 

class A extends Base{ 
    private UserEnum z; 
    ... 
} 

class B extends Base{ 
    private UserEnum2 z; 
    ... 
} 
1

我前一段時間解決了這個問題的工具。我處理它的方式是有一個基類,這是通用的:

public class Table<Column extends Enum<Column> & Table.Columns> { 

    public interface Columns { 
    } 

子類看起來像:

public class VersionTable extends Table<VersionTable.Column> { 

    public enum Column implements Table.Columns { 

    Version, 
    Alias; 

    } 

他們登記他們的具體enum通過super(Columns)構造。

很明顯,這比我可以在答案中發表的內容要多得多,但請放心,可以使用此結構來構建完全類型安全的機制。

+1

我有點像這個想法。基本上你試圖用不同的枚舉類型(列)創建泛型表..我正在尋找一個類似的解決方案,但不知道如何使用枚舉類型來完成。謝謝!! – dsreddy 2014-09-19 19:05:00

+0

@dsreddy - 這種技術的優雅之處在於您可以獲得類型安全**和**枚舉。 – OldCurmudgeon 2014-09-19 20:32:06