我的eclipse IDE中出现以下错误:
在定义字段之前无法引用字段
我尝试使用枚举变量,其中一些值具有相同的名称。
public enum Enun {
A(STATIK);
private static int STATIK = 1;
private Enun(final int i) {
}
}
有人能告诉我如何解决这个问题吗?
谢谢:)
答案 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使用静态。