实现接受枚举的接口的类

时间:2009-07-14 00:29:48

标签: java generics interface enums

所以,说我有一个简单的枚举和一个使用它的类:

enum ThingType { POTATO, BICYCLE };

class Thing {
    public void setValueType(ThingType value) { ... }
    public ThingType getValueType() { ... }
}

但是,实际上,我有很多不同的类来实现setValueType,每个类都有不同类型的枚举。我想创建一个这样的类可以使用泛型支持setValueType和getValueType的接口:

interface ValueTypeable {
    public Enum<?> getValueType(); // This works
    public <T extends Enum<T>> setValueType(T value); // this fails horribly
}

我无法更改类模型,因为这些类是从XML模式(JAXB)自动生成的。我觉得我没有抓住枚举和泛型相结合。这里的目标是我希望能够允许用户从枚举列表中进行选择(因为我已经知道运行时的类型)并在特定类中设置值。

谢谢!

2 个答案:

答案 0 :(得分:3)

您是否尝试过参数化界面本身。像:

class Thing<E extends Enum<? extends E>> {
  public E getValueType();
  public void setValueType(E value);
}

然后你让子类扩展一个正确的类型:

class SomeSubClass implements Thing<ThingType> { ... }

答案 1 :(得分:0)

枚举适用于具有固定集合的情况。如果您说每个实现都有自己的实现,那么您不再拥有固定的设置,并且您尝试使用枚举的方式与您的需求不符。

您可能对request for Java to be able to have abstract enums感兴趣。