如果你只想要任何枚举,那么你可以使用E extends Enum<E>
。
public class Baseclass<E extends Enum<E>> {
private final E e;
public Baseclass(E e) {
this.e = e;
}
}
所有enum
小号延伸Enum<E>
,使得它们可以继承标准方法如name
和values
。这是enum
s无法扩展其他类的原因之一,因为允许Java中的class
扩展两个类。
每个子类必须与特定的枚举这样的扩展BaseClass
:
enum MyEnum {
I, Me, My, Mine;
}
class A extends BaseClass<MyEnum> {
public A(MyEnum e) {
super(e);
}
}
如果您想进一步的限制 - 比如让子类只使用一种特殊类型的枚举(如实现一个接口),那么您可以将接口添加到通用这样的:
public interface SpecialEnum {
}
enum MyEnum implements SpecialEnum {
I, Me, My, Mine;
}
enum NotSpecialEnum {
Am, I, Special;
}
public class BaseClass<E extends Enum<E> & SpecialEnum> {
private final E e;
public BaseClass(E e) {
this.e = e;
}
}
class A extends BaseClass<MyEnum> {
public A(MyEnum e) {
super(e);
}
}
// This is not allowed.
class B extends BaseClass<NotSpecialEnum> {
public A(NotSpecialEnum e) {
super(e);
}
}
你甚至可以把枚举内的扩展类:
class A extends BaseClass<A.AnotherEnum> {
enum AnotherEnum implements SpecialEnum {
Hello, All;
}
public A(AnotherEnum e) {
super(e);
}
}
我想要一个类型的枚举。就像一个界面IEnum。 –
@mani_nz - 我已经添加了一些进一步改进的例子。 – OldCurmudgeon