Java枚举泛型

mani_nz

我有一个如下的课程,

public class Baseclass {
   private final EmployeeEnum empEnum;
   public Baseclass(EmployeeEnum e) {
       this.empEnum = e;
    }
}

现在,我想使Baseclass泛型,并使其接受某种类型的Enums。

由于枚举不能延长我已经创建了一个接口的类IEnum,并提出EmployeeEnumManagerEnum(我创建新枚举)实现的接口。

我对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这是enums无法扩展其他类的原因之一,因为classJava中不允许扩展两个类。

每个子类都必须扩展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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章