如何创建接受不同枚举的通用抽象方法



如何创建接受不同枚举的抽象泛型方法doSomething((?Enum1和Enum2、Enum3等等?

public abstract class NumerOne {

public abstract void doSomething();

}
public class NumberTwo extends NumberOne {
@Override
public void doSomething (Enum1 enum1) {
enum1.createSomething();
}

接受少数枚举类型但不接受任何枚举(<T extends Enum<T>(或(更糟的是(Object的最合适方法是创建一个接口,并让您想要接受的所有枚举实现该接口:

interface CreatorOfSomething {
// I have no idea what type should be returned here,
// as you don't use this value in your example.
// But I'm pretty sure it can't be void, so I'll go with Integer.
// You can have this parameterised as <T> at the interface level.
Integer createSomething();
}
enum Enum1 implements CreatorOfSomething {
A, B, C;
@Override
public Integer createSomething() {
return ordinal();
}
}
enum Enum2 implements CreatorOfSomething {
X { // you can override the method for individual constants
@Override
public Integer createSomething() {
// .....
}
},
Y { ....
}

然后你的方法看起来像:

public void doSomething(CreatorOfSomething creator) {
creator.createSomething();
}

您发布的代码甚至没有编译。我们也无法运行它。下次请提供SSCCE,在其中您可以回答您的问题。

以下是您遇到的问题的解决方案:

abstract class NumberOne {
public abstract <T extends Enum<T>> void doSomething(T pEnum);
}
enum Enum1 {
A, B
}
enum Enum2 {
C, D
}
public class NumberTwo extends NumberOne {
@Override public <T extends Enum<T>> void doSomething(final T pEnum) {
System.out.println("Value: " + pEnum);
}
public static void main(final String[] args) {
final NumberTwo n2 = new NumberTwo();
n2.doSomething(Enum1.A);
n2.doSomething(Enum2.D);
}
}

最新更新