【问题标题】:How to pass an enumeration as a parameter to a function?如何将枚举作为参数传递给函数?
【发布时间】:2011-12-04 21:05:51
【问题描述】:

有没有一种简洁的方式将枚举 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?

【问题讨论】:

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


    【解决方案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);
        }
    }
    

    【讨论】:

    • 太好了,不知道我可以在模板中使用“&”...现在,我用我的代码尝试了你的想法并有一个问题。我必须将传入的枚举存储在我的班级中。那么我的变量会类似于:private myVar Class&lt;? extends Enum&lt;? extends XYZ&gt;&gt; 吗?我不确定如何为变量使用模板...
    • 在该类型上参数化您的类:例如,public class MyClass&lt;T extends Enum&lt;T&gt; &amp; XYZ&gt;。然后只需使用private Class&lt;T&gt; myVar;
    猜你喜欢
    • 2014-02-10
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多