是否可以为枚举值添加泛型?包含示例伪代码

时间:2011-10-21 15:48:39

标签: java generics enums

是否可以在枚举值中添加泛型?

与此伪代码类似的东西:

    public enum MyEnum<T> {

            VALUE1<String>,
            VALUE2<Boolean>;

            public T get() {
                    return (T) AnotherSystem.get(this); // Where AnotherSystem.get returns an Object
            }

    }

我刚刚写错了,还是根本不可能?

我还需要做什么其他选项get()返回一个特定的泛型类型(T)

2 个答案:

答案 0 :(得分:4)

你可以做到

        public <T> T get() {
                return (T) AnotherSystem.get(this); 
        }

如果您需要将类型与枚举关联,则它可以是属性

public enum MyEnum {

    VALUE1(String.class),
    VALUE2(Boolean.class);

    public final Class<?> type;
    MyEnum(Class<?> type){ this.type = type; }

    public <T> T get() {
        return (T) AnotherSystem.get(this, this.type);
    }

}

class AnotherSystem
{
    static<T> T get(MyEnum e, Class<T> type){ return null; }
}

答案 1 :(得分:1)

不,我不相信这样的事情是可能的。如果你看一下section 8.9 of the JLS,其中指定了枚举声明,那里没有关于泛型的内容:

将它与section 8.1中的“普通”类声明进行比较,其中部分规范是涉及的类型参数。