Java枚举泛型
我有一门课,如下所示Java枚举泛型,java,generics,enums,Java,Generics,Enums,我有一门课,如下所示 public class Baseclass { private final EmployeeEnum empEnum; public Baseclass(EmployeeEnum e) { this.empEnum = e; } } public class Baseclass { private final Enum<?> empEnum; public Baseclass(Enum<?> e) {
public class Baseclass {
private final EmployeeEnum empEnum;
public Baseclass(EmployeeEnum e) {
this.empEnum = e;
}
}
public class Baseclass {
private final Enum<?> empEnum;
public Baseclass(Enum<?> e) {
this.empEnum = e;
}
}
现在我想让基类成为泛型的,并让它接受某种类型的枚举
由于枚举无法扩展类,我创建了一个接口IEnum
,并使EmployeeEnum
和ManagerEnum
(我创建的新枚举)实现该接口
我对基类做了如下更改
public class Baseclass {
private final EmployeeEnum empEnum;
public Baseclass(EmployeeEnum e) {
this.empEnum = e;
}
}
public class Baseclass {
private final Enum<?> empEnum;
public Baseclass(Enum<?> e) {
this.empEnum = e;
}
}
公共类基类{
私有最终枚举empEnum;
公共基类(枚举e){
this.empEnum=e;
}
}
有更好的方法吗
干杯 如果您只需要任何枚举,那么您可以使用
E扩展枚举
如果需要进一步的限制,例如使子类仅使用特殊类型的枚举(例如实现接口),则可以将接口添加到泛型中,如下所示:
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);
}
}
公共接口专用{
}
枚举MyEnum实现SpecialEnum{
一、 我,我的,我的;
}
无特殊种{
我,我,特别;
}
公共类基类{
私人期末考试;
公共基类(E){
这个。e=e;
}
}
类扩展了基类{
公共A(MyEnum e){
超级(e);
}
}
//这是不允许的。
类B扩展了基类{
公共A(非特殊e){
超级(e);
}
}
您甚至可以将enum放在扩展类中:
class A extends BaseClass<A.AnotherEnum> {
enum AnotherEnum implements SpecialEnum {
Hello, All;
}
public A(AnotherEnum e) {
super(e);
}
}
A类扩展了基类{
枚举AnotherEnum实现SpecialEnum{
大家好,;
}
公共A(AnotherEnum e){
超级(e);
}
}
如果您只需要任何枚举,则可以使用E扩展枚举
如果需要进一步的限制,例如使子类仅使用特殊类型的枚举(例如实现接口),则可以将接口添加到泛型中,如下所示:
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);
}
}
公共接口专用{
}
枚举MyEnum实现SpecialEnum{
一、 我,我的,我的;
}
无特殊种{
我,我,特别;
}
公共类基类{
私人期末考试;
公共基类(E){
这个。e=e;
}
}
类扩展了基类{
公共A(MyEnum e){
超级(e);
}
}
//这是不允许的。
类B扩展了基类{
公共A(非特殊e){
超级(e);
}
}
您甚至可以将enum放在扩展类中:
class A extends BaseClass<A.AnotherEnum> {
enum AnotherEnum implements SpecialEnum {
Hello, All;
}
public A(AnotherEnum e) {
super(e);
}
}
A类扩展了基类{
枚举AnotherEnum实现SpecialEnum{
大家好,;
}
公共A(AnotherEnum e){
超级(e);
}
}
有更好的方法吗
更好的方法是什么?您可以更改为下面的代码,该代码将限制您使用扩展IEnum的枚举:
class Baseclass<T extends Enum<T> & IEnum> {
private final T empEnum;
public Baseclass(T e) {
empEnum = e;
}
}
类基类{
私人终审法院;
公共基类(TE){
empEnum=e;
}
}
所以T扩展了Enum
-T必须是一个Enum
&
-和
IEnum
-T
必须扩展IEnum
有更好的方法吗
更好的方法是什么?您可以更改为下面的代码,该代码将限制您使用扩展IEnum的枚举:
class Baseclass<T extends Enum<T> & IEnum> {
private final T empEnum;
public Baseclass(T e) {
empEnum = e;
}
}
类基类{
私人终审法院;
公共基类(TE){
empEnum=e;
}
}
所以T扩展了Enum
-T必须是一个Enum
&
-和
IEnum
-T
必须扩展IEnum
我想要一个类型的枚举。就像一个接口IEnum。我想要一个类型的枚举。就像一个接口IEnum。除了修改类定义之外,还有其他的吗?仅仅通过更改构造函数签名?对不起,这对我来说毫无意义。为什么不想更改类定义?该类具有其他构造函数,这些构造函数接受枚举以外的参数。您的回答很有帮助。谢谢除了修改类定义之外,还有别的吗?仅仅通过更改构造函数签名?对不起,这对我来说毫无意义。为什么不想更改类定义?该类具有其他构造函数,这些构造函数接受枚举以外的参数。您的回答很有帮助。谢谢