2011-10-10 163 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

相關問題