我开始相信不可能用Java扩展EnumMap
,因为超级构造函数是有问题的。必须调用super()
构造函数。
我在下面对super(...)
的调用中试用了几种变体。它们都会产生语法错误。
意图:
abstract public class EnumModel<K extends Enum<K>, T> extends EnumMap<K, T>
{
protected EnumModel( ) {
super( K.class ); // <-- "Cannot select from a type variable"
}
}
为对比起见,下面的示例将使用特定的Enum类型进行编译。但仅适用于枚举Colour
。
enum Colour{
RED, BLACK, BLUE;
}
abstract public class EnumModel<T> extends EnumMap<Colour, T>
{
protected EnumModel( ) {
super( Colour.class ); // <-- will compile
}
}