Java 创建枚举的超类

Java 创建枚举的超类,java,inheritance,enums,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(St

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

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;
    }
}

提前谢谢你

枚举不能在Java中扩展。

枚举不能在Java中扩展。

在Java中,这有很多困难,但是一个解决方案将为您提供大量您需要的内容,那就是让所有枚举实现一个公共接口

对于实现接口的方法来说,重用代码会有困难,但是可以通过将实际工作委托给外部方法来减轻损害

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


基本上,这是我现在在一个项目中做这件事的概要。

在Java中这是有困难的,但是一个解决方案可以给你很多你需要的东西,那就是让你所有的枚举实现一个公共接口

对于实现接口的方法来说,重用代码会有困难,但是可以通过将实际工作委托给外部方法来减轻损害

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


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

扩展枚举是不可能的,但是您可以实现一个公共接口来添加额外的功能

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
   }
}

扩展枚举是不可能的,但是您可以实现一个公共接口来添加额外的功能

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
   }
}

可能的副本只能实现接口以确保兼容性,至少是.Thx-Keppil,但我已经读过了。值将不相同,只有方法仍然有效,您不能扩展
enum
s,也不能扩展任何内容。不过,如果有帮助,它可以实现一个
接口
。可能的副本只能实现接口以确保兼容性,至少。Thx Keppil,但我已经读过了。值将不相同,只有方法仍然有效,您不能扩展
enum
s,也不能扩展任何内容。但是,如果有帮助的话,它可以实现一个
接口!虽然这看起来很复杂,但对大脑来说(我认为)有些事情很简单。我主要关心的是避免代码重复。但是,如果只有4或5个这样的枚举,我也可以复制/粘贴:我相信sI有6个枚举,拥有这种体系结构是非常值得的,因为我绝对需要对枚举成员的类型进行分派。没有其他东西可以取代这一优势,所以如果我不使用它,它将是唯一更多的代码。Thx的帮助,你肯定把我放在一个正确的轨道上。我认为从外部完成工作可能是最干净的解决方案THX Marko!虽然这看起来很复杂,但对大脑来说(我认为)有些事情很简单。我主要关心的是避免代码重复。但是,如果只有4或5个这样的枚举,我也可以复制/粘贴:我相信sI有6个枚举,拥有这种体系结构是非常值得的,因为我绝对需要对枚举成员的类型进行分派。没有其他东西可以取代这一优势,所以如果我不使用它,它将是唯一更多的代码。Thx的帮助,你肯定把我放在一个正确的轨道上。我认为从外部完成工作可能是最干净的解决方案,这就是我所需要的!这就是我需要的!