5

我有一个这样的枚举:

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

    private final MyClass instance;

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

如何将 MyClass 实例从 Spring 上下文传递给枚举构造函数?甚至可能吗?

我需要它,因为我在创建它时将一些参数从配置(.properties 文件)传递到 MyClass 实例。现在我用 bean 在 xml 文件中做这件事,也许还有另一种方法?

4

3 回答 3

6

你不能做这个。

在这个关于枚举类型的官方 Java 教程中,它指出

注意:枚举类型的构造函数必须是包私有或私有访问。它会自动创建在枚举体开头定义的常量。您不能自己调用​​枚举构造函数。

由于 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 回答