使用枚举中定义的静态字段作为构造函数中的参数

Mar*_*son 5 java enums constructor

我有一个枚举,想在构造函数中使用静态值作为参数。

public enum Enum
{
    e1(0),
    e2(1),
    e3(SPECIAL_VALUE);

    static int SPECIAL_VALUE = -1;

    int value;

    private Enum(int value)
    {
        this.value = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,SPECIAL_VALUE在初始化之前先对其进行访问,因此这显然不起作用。我想知道是否有一个通用的解决方案。还是我不需要这样做的原因。

注意:某处可能存在重复项,但是我能找到的所有内容都与在构造函数主体中使用静态字段有关,而不是作为参数,并且我认为此处提出的解决方案不适用。

Kal*_*oni 4

package test;

public enum Enum
{

    e1(0),
    e2(1),
    e3(SPECIAL_VALUE());

    static int SPECIAL_VALUE(){return -1;}

    int value;

    private Enum(int value)
    {
        this.value = value;
    }
    public int getValue()
    {
        return value;
    }

    public static void main(String args[])
    {
        System.out.println(e3.name());
        System.out.println(e3.getValue());
    }
}
Run Code Online (Sandbox Code Playgroud)

第一次尝试ideone,瞧!http://ideone.com/Bz1N69

  • @MarJohnson但是要小心这个解决方案,因为如果你想重写`SPECIAL_VALUE()`方法来实际返回一些静态`SPECIAL_VALUE`,它将返回`0`或`null`而不是实际值(因为它不会尚未初始化)。 (3认同)