Java:方法参数中的通用枚举

2022-09-01 05:49:37

对应以下问题:

Java:方法中的枚举参数

我想知道,如何格式化代码以通用地要求枚举。

傅.java

public enum Foo { 
    a(1), b(2);
}

酒吧.java

public class Bar {
    public Bar(generic enum);
}

稍后,我将拥有更多枚举类,如“foo”,但您仍然可以创建包含任何类型枚举类的bar。顺便说一句,我有“jdk1.6.0_20”...


答案 1

有关参考,请参阅 EnumSet 中的方法,例如

public static <E extends Enum<E>> EnumSet<E> of(E e)

(此方法返回一个枚举集,其中包含给定枚举元素 e 中的一个元素)

因此,您需要的通用边界是:<E extends Enum<E>>


实际上,您可能会使自己变得通用:Bar

public class Bar<E extends Enum<E>> {

    private final E item;

    public E getItem(){
        return item;
    }

    public Bar(final E item){
        this.item = item;
    }
}

您也可以添加一个工厂方法,如 等。fromwith

public static <E2 extends Enum<E2>> Bar<E2> with(E2 item){
    return new Bar<E2>(item);
}

这样,在客户端代码中,您只需编写一次通用签名:

// e.g. this simple version
Bar<MyEnum> bar = Bar.with(MyEnum.SOME_INSTANCE);
// instead of the more verbose version:
Bar<MyEnum> bar = new Bar<MyEnum>(MyEnum.SOME_INSTANCE);

参考:


答案 2

您也可以通过以下方式执行此操作:

public class Bar {
    public Bar(Enum<?> e){}
}

每个枚举都扩展了枚举。然后,如果您需要枚举常量,则可以使用它:

e.getDeclaringClass().getEnumConstants()