2013-01-19 71 views
17
public class Enumvalues{ 

    enum courseList { 
     JAVA, 
     C, 
     PYTHON, 
     PERL 
    } 

    enum generalInformation { 
     NAME, 
     AGE, 
     PHONE 
    } 

    enum sex { 
     MALE, 
     FEMALE 
    } 
} 

public static void main(String args[]) { 
    printEnumValue(generalInformation); // how to pass enum in this block 
} 


static void printEnumValue(enum generalInformation) { // how to receive enum in this block  
    System.out.println(java.util.Arrays.asList(generalInformation.values())); 
} 

回答

7

如果你想從

public class Test { 

    enum GeneralInformation{ 
     NAME; 
    } 

    private static void print(GeneralInformation val){ 
     System.out.println(val); 
    } 

    public static void main(String[] args) { 
     print(GeneralInformation.NAME); 
    } 
} 

否則,如果你想傳遞全班那麼,因爲它不是從問題明確枚舉傳遞一個值

private static void print(Class<?> generalInfo){ 

    } 

    public static void main(String[] args) { 
     print(GeneralInformation.class); 
    } 
+0

我想要通過enum.generalInformation –

+0

全班作爲枚舉就像任何其他類一樣,你想要類的文字?然後我編輯使用'類' –

+3

或者如果你想要枚舉類的所有實例,然後使用'GeneralInformation.values()'這將給你GeneralInformation [],其中包括枚舉的所有實例 –

0

的枚舉使用就像一個類型:

static void printEnumValue(courseList generalInformation) { // how to receive enum in this block 

使用像:

printEnumValue(courseList.JAVA);

1

printEnumValue(EnumValues.generalInformation.NAME,EnumValues.generalInformation.AGE,EnumValues.generalInformation.PHONE);
接收:

public static void printEnumValue(EnumValues.generalInformation en){ 
System.out.println(en.toString()); 
} 
11

枚舉是一個類。所以你可以傳遞一個類的實例(例如EnumValues.generalInformation.PHONE),或者你可以傳遞類本身(例如EnumValues.generalInformation.class)。

如果要列出枚舉類的所有實例,則需要傳遞枚舉類,例如使用EnumSet.allOf(EnumValues.generalInformation.class)

您的困惑主要來自您不尊重Java命名約定的事實。 ENums是類,應以大寫字母開頭(例如,GeneralInformation)。另一個混淆之處是名稱的選擇不當。 JAVA不是課程列表。這是一門課程。所以枚舉應該被命名爲Course

+0

感謝您的信息 –

4

請注意,您的問題混淆了兩個不同的問題:將枚舉傳遞給函數或將枚舉常量傳遞給函數。我的理解是你想要傳遞枚舉本身,而不是函數的常量之一。如果不是,請參閱Narendra Pathai關於如何將單個枚舉常量傳遞給函數的答案。如果你不知道一個枚舉和枚舉常量之間的區別是什麼,查看docs約枚舉...

我知道你想要的是有一個打印(或任何其他)函數,其中您可以傳遞任何可能的枚舉,以打印每個枚舉的可能值(即常量)。我發現下面的兩種方法做到這一點:

比方說我們有以下枚舉:

// The test enum, any other will work too 
public static enum ETest 
{ 
    PRINT,MY,VALUES 
} 

變式1:傳遞從枚舉到你的函數常量數組;由於枚舉的常量是靜態值,就可以很容易地訪問,並傳遞給你的「打印」功能如下:

public static void main(String[] args) 
{ 
    // retreive all constants of your enum by YourEnum.values() 
    // then pass them to your function 
    printEnum(ETest.values()); 
} 

// print function: type safe for Enum values 
public static <T extends Enum<T>> void printEnum(T[] aValues) 
{ 
    System.out.println(java.util.Arrays.asList(aValues)); 
} 

變式2:傳遞枚舉的類的功能參數。這可能看起來更漂亮,但要注意,反射參與(性能):

public static void main(String[] args) 
{ 
    printEnum2(ETest.class); 
} 

// print function: accepts enum class and prints all constants 
public static <T extends Enum<T>> void printEnum2(Class<T> aEnum) 
{ 
    // retreive all constants of your enum (reflection!!) 
    System.out.println(java.util.Arrays.asList(aEnum.getEnumConstants())); 
} 

在我看來,最好的變式使用變式1,因爲反射的過度使用的2.變式2唯一的好處給你,是你的函數內部有Enum本身的Class對象(靜態枚舉,不僅是常量),所以我已經提到它的完整性。

相關問題