我有一个如下的课程,
public class Baseclass {
private final EmployeeEnum empEnum;
public Baseclass(EmployeeEnum e) {
this.empEnum = e;
}
}
现在,我想使Baseclass泛型,并使其接受某种类型的Enums。
由于枚举不能延长我已经创建了一个接口的类IEnum
,并提出EmployeeEnum
和ManagerEnum
(我创建新枚举)实现的接口。
我对Baseclass做了如下更改,
public class Baseclass {
private final Enum<?> empEnum;
public Baseclass(Enum<?> e) {
this.empEnum = e;
}
}
有一个更好的方法吗?
干杯!!
如果只需要任何枚举,则可以使用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无法扩展其他类的原因之一,因为class
Java中不允许扩展两个类。
每个子类都必须扩展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);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句