是否有一种将枚举CLASS传递给函数的简洁方法?
考虑这样的事情:
public enum MyEnum implements XYZ {
//enum values
A,
B,
C;
}
public void getEnumeration(final Class<? extends XYZ> myEnum) {
//go through enumeration
for (XYZ xyz : myEnum.getEnumConstants()
System.out.println(xyz.toString());
}
传递的枚举如下:
getFunction(MyEnum.class);
现在...上面的工作,我可以将我的枚举传递给getEnumeration()
函数就好了。但是,我想确保我传入的内容确实是一个枚举,而不是任何实现XYZ
的类。 我意识到枚举是一种类,但有没有办法强类型这样,如果我传入一个实现XYZ
而不是枚举的类,编译器会选择它实现XYZ
?
答案 0 :(得分:5)
你可以这样做:
public static <T extends Enum<T> & XYZ> void getEnumeration(Class<T> myEnum) {
// ...
}
这是我写的一个实际例子来测试我的概念:
public class EnumTest {
public enum Runnables implements Runnable {
HELLO {
@Override
public void run() {
System.out.print("Hello, ");
}
},
WORLD {
@Override
public void run() {
System.out.println("world!");
}
};
}
public static <T extends Enum<T> & Runnable> void getEnumeration(Class<T> myEnum) {
for (Runnable runnable : myEnum.getEnumConstants())
runnable.run();
}
public static void main(String[] args) {
getEnumeration(Runnables.class);
}
}