提问人:Ayyoudy 提问时间:10/11/2011 更新时间:10/11/2011 访问量:284
如何将枚举作为参数传递给函数?
How to pass an enumeration as a parameter to a function?
问:
有没有一种干净的方法可以将枚举类传递给函数?
考虑如下:
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
答:
5赞
C. K. Young
10/11/2011
#1
您可以执行以下操作:
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);
}
}
评论
0赞
Ayyoudy
10/11/2011
太好了,不知道我可以在模板中使用“&”......现在,我用我的代码尝试了你的想法,并有一个问题。我必须将传入的枚举存储在我的类中。那么我的变量会是这样的吗?我不确定如何使用变量模板...private myVar Class<? extends Enum<? extends XYZ>>
1赞
C. K. Young
10/11/2011
将类参数化为该类型:例如,.然后只需使用 .public class MyClass<T extends Enum<T> & XYZ>
private Class<T> myVar;
评论