2011-10-10 136 views
0

有没有一种将枚举类传递给函数的简洁方法?如何将枚举作为参数传递给函数?

考虑这样的事情:

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

你可以这样做:

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

大,不知道我可以使用模板的“&”。 ..现在,我用我的代码尝试了你的想法,并有一个问题。我必须在我的课程中存储通过枚举。所以我的变量会是这样的:'私人myVar类<?扩展Enum <?扩展XYZ >>'?我不知道如何使用变量模板... – Ayyoudy

+1

参数化你的类,例如,'public class MyClass &XYZ>'。然后,只需使用私人类 myVar;'。 –

+0

听起来不错。谢谢 – Ayyoudy

相关问题