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

时间:2011-10-10 22:13:47

标签: java function parameter-passing enumeration strong-typing

是否有一种将枚举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

1 个答案:

答案 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);
    }
}