2014-09-19 66 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