创建一个枚举的超类

jle*_*and 1 java inheritance enums

我目前使用枚举定义如下:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

事实是,我将不得不使用相同的方法和构造函数使用几个枚举.在我的例子中唯一改变的是枚举本身的值.

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

所以我可以这样做:

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

提前谢谢你!

Mar*_*nik 9

在Java中存在这方面的困难,但是一个能够为您提供所需内容的解决方案是使您的所有枚举实现一个通用接口.

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

此外,通常需要按名称查找功能,无论确切的enum类如何,都会为您提供正确的枚举成员.这可以使用HashMap聚合所有枚举成员的单独来完成.

基本上,这是我现在在项目中如何做的概述.


Toi*_*lal 5

Java 中的枚举无法扩展。