如何将enum作为参数传递给java中的方法?

时间:2013-01-19 12:48:03

标签: java enums

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

8 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:9)

如果要从枚举

传递单个值
    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);
    }

答案 2 :(得分:7)

  

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

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

假设我们有以下枚举:

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

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

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

答案 3 :(得分:2)

TestEnumMain.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;}
}

DummyEnum.java:

Error in multi main
Module not found: 'babel' in C:\Users\Fahad Uddin\Desktop\ethereum-todolist-master

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

使用枚举就像一个类型:

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

用过:

printEnumValue(courseList.JAVA);

答案 6 :(得分:0)

la clase enumsería

public enum LdapExceptionEnumeration {

    LDAP_ATTR_NAME_CREATE_INVALIDO("3018","El nombre del atributo enviado es inválido")
String codigo;
    String error;

    private LdapExceptionEnumeration(String codigo, String error) {
        this.codigo = codigo;
        this.error = error;
    }

    public String getCodigo() {
        return codigo;
    }

    public String getError() {
        return error;
    }

}

Este seria el Junitest para la prueba

public class EnumTest {
 @Test
 public void consultaenum(){

     imprimeEnum(LdapExceptionEnumeration.LDAP_ATTR_NAME_CREATE_INVALIDO);

 }
public void imprimeEnum(LdapExceptionEnumeration enumClass){
     System.out.println("codigo: "+ enumClass.getCodigo());
     System.out.println("mensaje: "+ enumClass.getError());
 }
}

答案 7 :(得分:0)

枚举在技术上是 Enum 类的后代。因此,如果您只想在方法中使用 Enum 的标准方法(例如 values()),请像这样传递参数: static void printEnumValue(Enum generalInformation) 看,您唯一需要更改的是大写字母 E。