java - 如何实现 Java 枚举抽象类和接口(interface)?

标签 java inheritance enums abstract-class

我有以下问题。 我在 java 中有一个包含不同枚举类的包。

在添加所有枚举通用的新方法时,避免重复自己的正确方法是什么?

我的问题:

channel .java

    public enum Channel {
           channel1, channel2;
    }

颜色.java

    public enum color{
           color1, color2;
    }

两者都应该使用的方法:

    public static boolean contains(String channel) {
       for (Channel c : Channel.values()) {
          if (c.name().equals(channel)) {
              return true;
          }
      }
    return false;
    }

请注意,循环引用了枚举本身。因此,这将需要将该方法复制并粘贴到我要使用它的所有枚举中。 有什么建议吗?

谢谢 维克多

最佳答案

不幸的是,您不能按照您想要的方式进行操作。您可以做的是拥有某种具有通用方法的实用程序类。

例如……

public class EnumUtils {

    public static boolean contains(Enum[] enumValues, String nameToCheck) {

        for(Enum each : enumValues) {
            if(each.name().equals(nameToCheck)) {
                return true;
            }
        }
        return false;
    }
}

然后你可以像这样使用它......

System.out.println(EnumUtils.contains(Channel.values(), "channel1")); // TRUE
System.out.println(EnumUtils.contains(Color.values(), "octarine")); // FALSE

警告 - 在更复杂的系统中,这些静态 util 类有时有点“代码味道”,但我认为在您的情况下没问题。

对于 Java6:

     change each.name() => each.toString()

关于java - 如何实现 Java 枚举抽象类和接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30345332/

相关文章:

c# - 如何继承通用窗体并在 Visual Studio 设计器中打开它?

java - 在eclipse中自动更新实现类的参数

c++ - static_assert 向上转换是否需要调整指针

C# 枚举加法

java - 如何从命令行在 JUnit 中运行测试用例?

java - 我可以像在 C# 中一样访问 Java 中的 super 属性吗?

design-patterns - 您使用的是 C++ 中的哪种类型安全枚举?

C# 枚举 - 为什么从 0 *隐式* 转换有效?

java - 在实例 IntelliJ IDEA/Android Studio 快捷方式上创建方法

java - 是否可以将数据从数据库推送到 .docx 文件中的表中?