当前位置:  开发笔记 > 编程语言 > 正文

Java枚举泛型

如何解决《Java枚举泛型》经验,为你挑选了1个好方法。

我有一个课程如下,

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

现在我想使Baseclass通用并使其接受某种类型的枚举.

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

我已经对Baseclass做了如下更改,

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

有一个更好的方法吗?

干杯!!



1> OldCurmudgeo..:

如果您只想要任何枚举,那么您可以使用E extends Enum.

public class Baseclass> {

    private final E e;

    public Baseclass(E e) {
        this.e = e;
    }
}

所有enums都扩展,Enum以便它们可以继承标准方法,如namevalues.这是enums不能扩展其他类的原因之一,因为classJava中不允许扩展两个类.

每个子类必须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);
    }

}

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有