我有一个课程如下,
public class Baseclass { private final EmployeeEnum empEnum; public Baseclass(EmployeeEnum e) { this.empEnum = e; } }
现在我想使Baseclass通用并使其接受某种类型的枚举.
由于枚举不能延长我已经创建了一个接口的类IEnum
,并提出EmployeeEnum
和ManagerEnum
(我创建新枚举)实现的接口.
我已经对Baseclass做了如下更改,
public class Baseclass { private final Enum> empEnum; public Baseclass(Enum> e) { this.empEnum = e; } }
有一个更好的方法吗?
干杯!!
如果您只想要任何枚举,那么您可以使用E extends Enum
.
public class Baseclass> { private final E e; public Baseclass(E e) { this.e = e; } }
所有enum
s都扩展,Enum
以便它们可以继承标准方法,如name
和values
.这是enum
s不能扩展其他类的原因之一,因为class
Java中不允许扩展两个类.
每个子类必须BaseClass
使用如下特定的枚举进行扩展:
enum MyEnum { I, Me, My, Mine; } class A extends BaseClass{ 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& SpecialEnum> { private final E e; public BaseClass(E e) { this.e = e; } } class A extends BaseClass { public A(MyEnum e) { super(e); } } // This is not allowed. class B extends BaseClass { public A(NotSpecialEnum e) { super(e); } }
你甚至可以将枚举放在扩展类中:
class A extends BaseClass{ enum AnotherEnum implements SpecialEnum { Hello, All; } public A(AnotherEnum e) { super(e); } }