如何在java中的方法中将枚举作为参数传递?

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

enum是一个类。 所以你可以传递类的实例(例如EnumValues.generalInformation.PHONE ),或者你可以传递类本身(例如EnumValues.generalInformation.class )。

如果要列出枚举类的所有实例,则需要传递枚举类,并使用EnumSet.allOf(EnumValues.generalInformation.class)作为示例。

您的困惑主要来自于您不尊重Java命名约定。 ENums是类,应该以大写字母开头(例如GeneralInformation )。 另一个混乱的来源是名称选择不当。 JAVA不是课程列表。 这是一门课程。 所以枚举应该命名为Course

如果要从枚举中传递单个值

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

否则如果你想要通过整个class级,因为从问题中不清楚

 private static void print(Class generalInfo){ } public static void main(String[] args) { print(GeneralInformation.class); } 

请注意,您的问题混淆了两个不同的问题:将枚举传递给函数或将枚举常量传递给函数。 我的理解是你想要传递枚举本身,而不是它的一个常量函数。 如果不是:请参阅Narendra Pathai关于如何将单个枚举常量传递给函数的答案。 如果您不知道枚举和枚举常量之间的区别是什么,请查看有关枚举的文档 …

我明白你想要的是有一个打印(或任何其他)函数,你可以传递任何可能的枚举,打印每个枚举的可能值(即常量)。 我发现以下两种方法可以做到这一点:

可以说我们有以下枚举:

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

Variante 1:将你的枚举中的常量数组传递给你的函数; 由于枚举的常量是静态值,因此可以轻松访问它们并将其传递给“print”函数,如下所示:

 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 > void printEnum(T[] aValues) { System.out.println(java.util.Arrays.asList(aValues)); } 

Variante 2:将枚举类作为函数参数传递。 这可能看起来更漂亮,但要注意涉及到reflection(性能):

 public static void main(String[] args) { printEnum2(ETest.class); } // print function: accepts enum class and prints all constants public static > void printEnum2(Class aEnum) { // retreive all constants of your enum (reflection!!) System.out.println(java.util.Arrays.asList(aEnum.getEnumConstants())); } 

在我看来,最好使用variante 1,因为variante 2中reflection的过度使用.Viriante 2给你的唯一优点是你有Enum本身的Class对象(静态枚举,不仅仅是它的常量)在你的function中,所以我已经提到了它的完整性。

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

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

枚举就像一个类型一样使用:

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

用过:

printEnumValue(courseList.JAVA);

TestEnumMain.java:

 package enumSample; import org.apache.commons.lang3.EnumUtils; public static void main(String[] args) { boolean result= isValidEnum(DummyEnum.class, "APPLE"); System.out.println("result= " + result); boolean result2= isValidEnum2(DummyEnum.class, "COF"); System.out.println("result2= " + result2); //boolean result3= isValidEnum2(A_Different_Enum.class, "COF"); //works //System.out.println("result3= " + result3); } public static> boolean isValidEnum2(Class enumClass, String enumName) { System.out.println("enumClass.getEnumConstants().length= " + enumClass.getEnumConstants().length); System.out.println("enumClass.getEnumConstants()[0]= " + enumClass.getEnumConstants()[0]); System.out.println("enumClass.getEnumConstants()[1]= " + enumClass.getEnumConstants()[1].name()); System.out.println("enumName.valueOf(enumClass)= "+ enumName.valueOf(enumClass)); if(enumName== null) { return false; } else { try { if(enumClass.isAssignableFrom(DummyEnum.class)) { /*Checks if enumClass is an instance of DummyEnum.class*/ for (int i=0; i!= enumClass.getEnumConstants().length; i++) { System.out.println("(DummyEnum) enumClass.getEnumConstants()["+i+"]).code()= "+ ((DummyEnum) enumClass.getEnumConstants()[i]).code()); if(enumName.equals(((DummyEnum) enumClass.getEnumConstants()[i]).code())) { return true; } } return false; } else { Enum.valueOf(enumClass, enumName); return true; } } catch (IllegalArgumentException var3){ return false; } } } //Original Method from apache.commons.long3.EnumUtils: public static> boolean isValidEnum(Class enumClass, String enumName) { if(enumName== null) { return false; } else { try { Enum.valueOf(enumClass, enumName); return true; } catch (IllegalArgumentException var3){ return false; } } } } 

DummyEnum.java:

 package enumSample; public enum DummyEnum { APPLE("APP"), GOOGLE("GOOG"), CAPITAL_ONE("COF"); private String code; DummyEnum(String code) {this.code= code;} public String code() {return code;} }