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

7 に答える 7

19

列挙型はクラスです。したがって、クラスのインスタンスを渡すことも (EnumValues.generalInformation.PHONEたとえば)、クラス自体を渡すこともできます (EnumValues.generalInformation.classたとえば)。

列挙型クラスのすべてのインスタンスを一覧表示する場合は、列挙型クラスを渡し、EnumSet.allOf(EnumValues.generalInformation.class)たとえば次のように使用する必要があります。

あなたの混乱は主に、Java の命名規則を尊重していないことに起因しています。Enum はクラスであり、大文字で始める必要があります (GeneralInformationたとえば)。混乱のもう 1 つの原因は、名前の不適切な選択です。JAVAはコース一覧ではありません。コースです。したがって、列挙型には名前を付ける必要がありますCourse

于 2013-01-19T12:55:01.410 に答える
19

あなたの質問は2つの異なる問題を混同していることに注意してください. Enumを関数に渡す OR Enum定数を関数に渡す. 私の理解では、関数に定数の1つではなく、列挙型自体を渡したいということでした。そうでない場合: 単一の列挙型定数を関数に渡す方法については、Narendra Pathai の回答を参照してください。列挙型と列挙型定数の違いがわからない場合は、列挙型に関するドキュメントを確認してください...

あなたが望むのは、列挙型の可能な値(つまり定数)のそれぞれを出力するために、可能な列挙型を渡すことができる印刷(またはその他の)関数を持つことであることを理解しています。これを行うには、次の2つのアプローチを見つけました。

次の列挙型があるとしましょう。

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

私の意見では、バリアント 2 ではリフレクションが過剰に使用されているため、バリアント 1 を使用することをお勧めします。バリアント 2 が提供する唯一の利点は、Enum 自体の Class オブジェクト (定数だけでなく静的な列挙型) を使用できることです。関数内にあるので、完全を期すために言及しました。

于 2016-10-16T01:31:45.537 に答える
16

列挙型から単一の値を渡したい場合

    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);
    }
于 2013-01-19T12:50:22.917 に答える
1

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

public static void printEnumValue(EnumValues.generalInformation en){
System.out.println(en.toString());
}
于 2013-01-19T12:54:33.190 に答える
0

列挙型は型と同じように使用されます。

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

次のように使用されます:

printEnumValue(courseList.JAVA);

于 2013-01-19T12:54:29.293 に答える