是否可以在枚举值中添加泛型?
与此伪代码类似的东西:
public enum MyEnum<T> {
VALUE1<String>,
VALUE2<Boolean>;
public T get() {
return (T) AnotherSystem.get(this); // Where AnotherSystem.get returns an Object
}
}
我刚刚写错了,还是根本不可能?
我还需要做什么其他选项get()返回一个特定的泛型类型(T)
答案 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中的“普通”类声明进行比较,其中部分规范是涉及的类型参数。