2013-01-19 12 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())); 
} 

risposta

7

Se si desidera passare un unico valore da enum

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

altrimenti se si vuole tutta la classe da passare poi, in quanto non era chiaro dalla questione

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

    } 

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

Voglio passare l'intera classe in enum.generalInformation –

+0

Poiché l'enum è uguale a qualsiasi altra classe, vuoi un valore letterale di classe? Poi ho modificato per usare 'Classe ' –

+3

Oppure se vuoi tutte le istanze di classe enum allora usa 'GeneralInformation.values ​​()' che ti darà GeneralInformation [] che include tutte le istanze di enum –

0

An enum viene utilizzato come un tipo:

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

utilizzato come:

printEnumValue(courseList.JAVA);

1

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

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

un enum è una classe. Quindi è possibile passare un'istanza della classe (ad esempio EnumValues.generalInformation.PHONE) oppure è possibile passare la classe stessa (ad esempio, EnumValues.generalInformation.class).

Se si desidera elencare tutte le istanze di una classe enum, è necessario passare la classe enum e utilizzare EnumSet.allOf(EnumValues.generalInformation.class) ad esempio.

La vostra confusione deriva principalmente dal fatto che non rispettate le convenzioni di denominazione Java. ENums sono classi e dovrebbero iniziare con una lettera maiuscola (ad esempio GeneralInformation). Un'altra fonte di confusione è la cattiva scelta dei nomi. JAVA non è un elenco di corsi. È un corso. Quindi l'enum dovrebbe essere chiamato Course.

+0

Grazie per le tue informazioni –

4

Si noti che la domanda ha mescolato due diversi problemi: passare un enum a una funzione o passare una costante Enum a una funzione. La mia comprensione è che si vuole passare l'enum stesso, non una delle costanti alla funzione. In caso contrario: fare riferimento alla risposta di Narendra Pathai su come passare una singola costante enum a una funzione. Se non si sa quale sia la differenza tra un enum e una costante enum è, rivedere il docs su enumerazioni ...

Capisco che ciò che si desidera è di avere una funzione in cui la stampa (o qualsiasi altro) puoi passare qualsiasi enum possibile, per stampare ciascuno dei valori possibili dell'enum (cioè le costanti). Ho trovato i seguenti due approcci per fare questo:

Diciamo che abbiamo la seguente enum:

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

Variante 1: passare la matrice delle costanti dal vostro enum alla funzione; Come costanti del enum sono valori statici, possono essere facilmente accessibili e passati alla funzione 'Stampa' come segue:

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

Variante 2: Far passare classe del enum come parametro di funzione.Questo potrebbe sembrare più bello, ma essere consapevoli che la riflessione è coinvolto (performance):

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())); 
} 

A mio parere, è meglio usare Variante 1 a causa del l'uso eccessivo di riflessione in variante 2. L'unico vantaggio che Variante 2 ti dà, è che hai l'oggetto Class dell'Enum stesso (l'enum statico, non solo le sue costanti) all'interno della tua funzione, quindi l'ho menzionato per completezza.

Problemi correlati