如何将枚举作为参数传递给函数?

How to pass an enumeration as a parameter to a function?

提问人:Ayyoudy 提问时间:10/11/2011 更新时间:10/11/2011 访问量:284

问:

有没有一种干净的方法可以将枚举类传递给函数?

考虑如下:

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()XYZXYZXYZ

java 函数 参数传递 枚举强 类型

评论


答:

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;