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

标签 java enums switch-statement

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

  1. 我无法直接在 switch 语句中使用接口(interface)对象。 switch 语句仅接受 enum、char、byte、short、int 和 string。
  2. 我可以打开object.getUniqueID(),其中getUniqueId是接口(interface)的成员,但在这种情况下,我将不得不对案例陈述。在我看来,这将是丑陋的并且几乎不可能重构。

我们需要的是一个实现

  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>> 而不是使用开关。因为它是可动态扩展的,但具有与交换机接近相同的性能。

关于java - 在 Java 中实现类似可扩展枚举的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31652203/

相关文章:

java - 当每个 case block 都有相同的代码时,在 switch-case 语句中使用什么?

时间:2018-03-08 标签:c++classesswitchcase

java - Swing:调用 setContentPane 时不刷新界面

java - 在 Spring JPA 中是否有更简洁的方式构建 MappedSuperclass Tree 类?

c++ - 使用枚举的一部分作为数组索引

c# - 在 C# 中创建枚举时出错 - "identifier expected"

swift - 如何在同一 IBAction 中取消选择(取消突出显示)按钮

java - 无法摆脱比较器的 NullPointerException

java - 如何使用keytool设置Usage属性

java - 你能将枚举类传递给方法吗(java)