Java 如何简化多个外观相同的枚举?

Java 如何简化多个外观相同的枚举?,java,interface,enums,Java,Interface,Enums,我得到了多个枚举,它们都实现了相同的接口AnimationSet,但是还有一些字段,比如filename,每个枚举必须实现完全相同的getFilename() 编辑:我现在使用这些枚举填充列表,其中第一个列表对应枚举和一组动画,第二个列表包含组中的所有动画,第三个列表(带图像)表示一个特定动画中的所有图像。 稍后,我可以从这个列表中从外部获取图像 现在我正在寻找一种简化/缩短代码的方法(方法和字段都是相同的) 我考虑了一个超类,但这是不可能的,因为枚举已经扩展了枚举。我还考虑将枚举更改为类,但我

我得到了多个枚举,它们都实现了相同的接口AnimationSet,但是还有一些字段,比如filename,每个枚举必须实现完全相同的getFilename()

编辑:我现在使用这些枚举填充
列表
,其中第一个列表对应枚举和一组动画,第二个列表包含组中的所有动画,第三个列表(带图像)表示一个特定动画中的所有图像。
稍后,我可以从这个列表中从外部获取图像

现在我正在寻找一种简化/缩短代码的方法(方法和字段都是相同的)

我考虑了一个超类,但这是不可能的,因为枚举已经扩展了枚举。我还考虑将枚举更改为类,但我希望保留枚举值。我还考虑了一个抽象接口,但我所想的是不可能的


<>你能帮我想一个方法来实现简化吗?

你可以考虑使用委托而不是继承:

public class AnimationSet {
    private final String path, filename;

    public AnimationSet(String path, String filename) {
        this.path = path;
        this.filename = filename;
    }
    public String getPath() {
        return path;
    }
    public String getFilename(){
        return filename;
    }
}

public enum HammerAnimationSet {
    ONE("1"),
    TWO("2"),
    THREE("3"),
    FOUR("4");

    final AnimationSet animationSet;

    HammerAnimationSet(String filename) {
        animationSet=new AnimationSet("hammer/", filename);
    }
    public AnimationSet getAnimationSet() {
        return animationSet;
    }
}

public enum ShopAnimationSet {
    HEART("heart"),
    MANA("mana bottle"),
    LUCK("clover");

    final AnimationSet animationSet;

    private ShopAnimationSet(String filename){
        animationSet=new AnimationSet("shop/", filename);
    }
    public AnimationSet getAnimationSet() {
        return animationSet;
    }
}

因此,可以扩展
AnimationSet
的功能,而无需调整任何
enum
s.

这可能更适合,尽管不投票关闭。您想在这里简化什么?这里只有构造函数和getter如果你在代码审查时问这个问题,你需要包含更多的上下文才能充分讨论这个主题-你在代码中如何使用这些类?@user902383每个枚举都有完全相同的构造函数和getter,我想消除重复(这实际上是复制和粘贴)。
public class AnimationSet {
    private final String path, filename;

    public AnimationSet(String path, String filename) {
        this.path = path;
        this.filename = filename;
    }
    public String getPath() {
        return path;
    }
    public String getFilename(){
        return filename;
    }
}

public enum HammerAnimationSet {
    ONE("1"),
    TWO("2"),
    THREE("3"),
    FOUR("4");

    final AnimationSet animationSet;

    HammerAnimationSet(String filename) {
        animationSet=new AnimationSet("hammer/", filename);
    }
    public AnimationSet getAnimationSet() {
        return animationSet;
    }
}

public enum ShopAnimationSet {
    HEART("heart"),
    MANA("mana bottle"),
    LUCK("clover");

    final AnimationSet animationSet;

    private ShopAnimationSet(String filename){
        animationSet=new AnimationSet("shop/", filename);
    }
    public AnimationSet getAnimationSet() {
        return animationSet;
    }
}