所以,说我有一个简单的枚举和一个使用它的类:
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)自动生成的。我觉得我没有抓住枚举和泛型相结合。这里的目标是我希望能够允许用户从枚举列表中进行选择(因为我已经知道运行时的类型)并在特定类中设置值。
谢谢!
答案 0 :(得分:3)
您是否尝试过参数化界面本身。像:
class Thing<E extends Enum<? extends E>> {
public E getValueType();
public void setValueType(E value);
}
然后你让子类扩展一个正确的类型:
class SomeSubClass implements Thing<ThingType> { ... }
答案 1 :(得分:0)
枚举适用于具有固定集合的情况。如果您说每个实现都有自己的实现,那么您不再拥有固定的设置,并且您尝试使用枚举的方式与您的需求不符。