5

私は次のような列挙型を持っています:

public enum SomeEnum {
    ONE (new MyClass()),
    TWO (new MyClass());

    private final MyClass instance;

    private SomeEnum(MyClass instance) {
        this.instance = instance;
    }
}

SpringコンテキストからMyClassインスタンスをenumコンストラクタに渡すにはどうすればよいですか? それは可能ですか?

作成中に構成 (.properties ファイル) から MyClass インスタンスにいくつかのパラメーターを渡すため、これが必要です。今、私はBeanを使用してxmlファイルでそれを行っていますが、別の方法があるのでしょうか?

4

3 に答える 3

6

これはできません。

列挙型に関するこの公式の Java チュートリアルでは、次のように述べています。

注: 列挙型のコンストラクターは、package-private または private アクセスである必要があります。列挙型本体の先頭に定義されている定数を自動的に作成します。enum コンストラクターを自分で呼び出すことはできません。

Enum は定数の定数セットであると想定されているため、新しいものを作成できるのは意味がないため、リフレクションを介してもコンストラクターを使用できません。

于 2013-08-09T15:29:50.733 に答える
2

Spring の文脈で話しても、それもありえないと思います。

列挙型は静的であるため、インスタンス化できません。したがって、Spring IoC も列挙型を作成できないと思います。

Spring IoCの章をご覧ください。

于 2013-08-09T15:35:22.273 に答える
0

ただし、できることは、列挙内で MyClass を活用して、「一定の」動作をカプセル化することです。これは好きなだけ取ることができます (必ずしも良いアイデアであるとは限りません... )。たとえば、静的ファクトリ クラスを使用して、渡された定数名に基づいてプロパティ値をロードすることができます。

public enum SomeEnum {
    ONE ("propname1"),
    TWO ("propname2");

    private final MyClass instance;

    private SomeEnum(String str) {
        this.instance = MyClassFactory.newInstance(str);
    }

    public Object doSomething(int value) {
        return instance.doSomething(value);
    }
}
于 2018-06-02T12:59:44.303 に答える