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

Implement something like an extendible enum in Java

为了在 java 中实现多个枚举的类型可替换性,我可以让它们都实现一个接口。但是在 switch-case 中使用接口的对象是具有挑战性的。

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

我们需要的是一个

的实现
  1. 可以用在switch-case语句中,满足以上两个问题
  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>> 而不是使用开关,因为它可以动态扩展,但性能接近于开关。