6

私はこのようなものが必要です:

public enum Enum {
    ENUM1<Class1>(Class1.class, "A DESCRIPTION", new Class1()),
    ENUM2<Class2>(Class2.class, "A DESCRIPTION", new Class2()),
    ENUM3<Class3>(Class3.class, "A DESCRIPTION", new Class3());

    private Enum(Class<? extends Object> clazz, String description, Object instance) {}
}

必要なもの: すべての ClassX の異なるインスタンスを定義する単一の場所 (それらは同じ ClassSuper を拡張します)。もちろん、ClassX ごとに異なる Enum を定義することもできますが、これは私が実際に望んでいることではありません。

4

3 に答える 3

6

JLS は、列挙型の型パラメーターを許可しません。

EnumDeclaration:
    ClassModifiers(opt) enum Identifier Interfaces(opt) EnumBody

EnumBody:
    { EnumConstants(opt) ,(opt) EnumBodyDeclarations(opt) }
于 2012-08-24T16:17:02.060 に答える
1

次のように記述して、すべて同じ情報を保持できます (クラスはクラスから取得できるため)。

public enum Enum {
    ENUM1("A DESCRIPTION", new Class1()),
    ENUM2("A DESCRIPTION", new Class2()),
    ENUM3("A DESCRIPTION", new Class3());

    private Enum(String description, Object instance) {}
}

あなたが見つける問題は、列挙型では、ジェネリックはそれほど役に立たず、ジェネリックなしでほとんど同じ動作を書くことができるということです.

于 2012-08-24T16:23:29.327 に答える
1

列挙型には実際にフィールドを含めることができ、それがあなたが望むもののように見えます:

private Object instance;
private Enum(Class<? extends Object> clazz, String description, Object instance) {
    this.instance=instance;
}
public Object getInstance() {
    return instance;
}

私が知る限り、列挙型はパラメーター化できないため、コードにそれを含めることはできません。しかし、これらのクラスで正確に何をしようとしていますか? あなたの質問を誤解しているかもしれません

于 2012-08-24T16:08:35.523 に答える