日食中的ENUM问题

时间:2011-02-20 19:38:02

标签: java enums

我的eclipse IDE中出现以下错误:

在定义字段之前无法引用字段

我尝试使用枚举变量,其中一些值具有相同的名称。

public enum Enun {
    A(STATIK);
    private static int STATIK = 1;

    private Enun(final int i) {
    }
}

有人能告诉我如何解决这个问题吗?

谢谢:)

4 个答案:

答案 0 :(得分:5)

是的,你不能在枚举声明中引用枚举的静态成员。如果要为这些数字命名,那么您应该使STATIK成为嵌套静态类的成员:

A(Constants.STATIK);

private static class Constants {
    private static int STATIK = 1;
}

private Enun(final int i) {
}

虽然我会质疑这一点的必要性 - 枚举名称应该告诉你关于这些数字的所有知识,你不应该需要一个附加的静态声明。

答案 1 :(得分:3)

你不能扩展任何其他内容,因为enum已经扩展了某些内容(通过规范),但你可以使用枚举实现!试试这个

public interface EnunConstants {
    int STATIK = 1;
    int AWESOME = 2;
    int POSSUM = 3;

}

public enum Enum implements EnunConstants {
    A(STATIK),
    B(AWESOME),
    C(POSSUM);

    private int val;

    private Enun(final int i) { this.val = i; }
    public int getVal() { return val; }

}

public class Sergio {

    public static void main(String[] args) {
        Enun S = Enun.A;
        System.out.println(S.getVal());
        Enun P = Enun.C;
        System.out.println(P.getVal());

    }

}

答案 2 :(得分:1)

反过来试试:

public enum Enun {
    A(1);
    private static int STATIK = A.ordinal();

    private Enun(final int i) {
    }
}

这有副作用,现在STATIK不再是编译时常量,但是这几乎没有重要的位置(在switch语句中使用 - 但你应该使用你的枚举值)。

答案 3 :(得分:0)

你不能在构造函数中传递STATIK,如果你想实现这个使用像

这样的东西
public enum Enun {
    A(1);
    private int someInt;

    private Enun(final int i) {
        this.someInt = i;
    }
}

默认情况下,枚举是一个单例,因此不需要为此int使用静态。