如何创建接受不同枚举的抽象泛型方法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);
}
}