1

我目前使用这样定义的枚举:

public enum Language{
    English("english", "eng", "en", "en_GB", "en_US"),
    German("german", "de", "ge"),
    Croatian("croatian", "hr", "cro"),
    Russian("russian");

    private final List<String> values;

    Language(String ...values) {
        this.values = Arrays.asList(values);
    }

    public List<String> getValues() {
        return values;
    }
    public static Language find(String name) {
        for (Language lang : Language.values()) {
            if (lang.getValues().contains(name)) {
                return lang;
            }
        }
        return null;
    }
}

问题是,我将不得不使用相同的方法和构造函数来使用多个枚举。在我的情况下,唯一改变的是枚举本身的值。

有没有办法让我创建一个我可以重用的枚举的超类?

这样我就可以做类似的事情:

public Language extends(specializedEnum){
        English("english", "eng", "en", "en_GB", "en_US"),
        German("german", "de", "ge"),
        Croatian("croatian", "hr", "cro"),
        Russian("russian");
}

提前谢谢你!

4

3 回答 3

9

这在 Java 中存在一些困难,但是一个能够满足您大量需求的解决方案是让所有枚举都实现一个通用接口。

您将难以重用实现接口的方法的代码,但您可以通过将实际工作委托给外部方法来减轻损害。

此外,通常需要一个按名称查找的函数,它可以为您提供正确的枚举成员,而不管确切的enum类如何。这可以使用HashMap聚合所有枚举成员的单独来完成。

基本上,这是我现在在项目中如何做的大纲。

于 2012-08-23T12:20:20.273 回答
4

枚举不能在 Java 中扩展。

于 2012-08-23T12:17:20.050 回答
4

它根本不可能扩展 Enums,但您可以实现一个通用接口来添加额外的功能。

public interface BaseLanguage {
   public void doStuff();
}

public enum Language implements BaseLanguage {
    English("english", "eng", "en", "en_GB", "en_US"),

   // etc.

   @Override
   public void doStuff() {
     // do work based on current Language enum
   }
}
于 2012-08-23T12:20:45.840 回答