在Java中实现类似于可扩展枚举的东西

时间:2015-07-27 11:44:27

标签: java enums switch-statement

要在java中的多个枚举中获得类型可替代性,我可以让它们都实现一个接口。但是在交换机外壳中使用接口的对象具有挑战性。

  1. 我不能直接在switch语句中使用接口对象。 switch语句只接受enum,char,byte,short,int和string。
  2. 我可以打开object.getUniqueID(),其中getUniqueId是接口的成员,但在这种情况下,我将不得不对case语句的值进行硬编码。哪个国际海事组织,将是丑陋的,几乎不可能重构。
  3. 需要的是一个实现

    的东西
    1. 可以在switch-case语句中使用,满足上述两个问题。
    2. 可替换类型。
    3. 任何指针都会有所帮助。

1 个答案:

答案 0 :(得分:2)

您应该使用具有所有可能enum值的单个枚举,或者在切换之前需要检查类型。

MyInterface value = ...

if (value instanceof EnymType1) {
    switch((EnumType1) value) {
        case ...

    }
} else if (value instanceof EnumType2) {
    switch((EnumType2) value) {
        case ...

    }
}

您可以使用Map<MyInterface, Consumer<MyInterface>>代替使用交换机,因为它可以动态扩展,但接近交换机的性能。