所以我有点困惑,因为我以前从未使用过枚举。我想在我的主要方法中使用这个枚举。由于某些原因,我不能(我什至在main中尝试执行Status s;
时都会不断出错)。但是,我可以从main调用我的TestingEnum
方法,当然这是可行的...但是我100%肯定以这种方式使用枚举是完全错误的。有人可以告诉我如何正确使用main吗?
如果我尝试这样做:状态s;在我的主要方法中,我收到此错误-“未找到符号Status s;”
背景:Java和枚举的新手...
class MyClass {
public Status s;
public enum Status {
STATUS_OPEN(1),
STATUS_STARTED(2),
STATUS_INPROGRESS(3),
STATUS_ONHOLD(4),
STATUS_COMPLETED(5),
STATUS_CLOSED(6);
private final int status;
Status(int stat) {
this.status = stat;
}
public int getStatus() {
return this.status;
}
}
private void setStatus(Status stat) {
s = stat;
}
public void TestingEnum() {
Status myStat = Status.STATUS_ONHOLD;
setStatus(myStat);
}
@Override
public String toString() {
StringBuilder result = new StringBuilder();
String NEW_LINE = System.getProperty("line.separator");
result.append(NEW_LINE + " Status: " + s + NEW_LINE);
return result.toString();
}
}
public class Main {
public static void main(String[] args) {
MyClass obj = new MyClass();
// PROBLEM SETTING STATUS HERE
// I can't do this:
Status s;
}
}
将枚举移动到其自己的类文件,或通过对封闭类的引用来访问它。
似乎您将Enum定义为另一个类的内部类。如果要执行此操作,则需要使用语法OuterClass.Status
进行访问。您公开了它,这样就可以了。您可以毫无问题地从类中访问它,因为它包含在父类的范围内。
因此,您可以在OuterClass.
之前添加Status
,也可以像其他任何类一样将Enum移到其自己的文件中。
从有限的代码中,我认为问题是您尝试访问
public Status s;
从静态方法main中不是静态的
public static void main(String[] args) {
...
}
从main创建类的实例,并在该实例上使用s或将s声明为static。
您不能只在这样的公共课程之前实例化一个枚举。解决问题的一种方法是拥有一个外部类,该类将把Enum类作为内部类:
public class MyStatus {
static enum Status {
STATUS_OPEN(1),
STATUS_STARTED(2),
STATUS_INPROGRESS(3),
STATUS_ONHOLD(4),
STATUS_COMPLETED(5),
STATUS_CLOSED(6),
ABANDONED(7);
private final int status;
Status(int stat) {
this.status = stat;
}
public int getStatus() {
return this.status;
}
}
private Status s;
public void setStatus(Status stat) {
s = stat;
}
public void TestingEnum() {
Status myStat = Status.ABANDONED;
setStatus(myStat);
}
@Override
public String toString() {
StringBuilder result = new StringBuilder();
String NEW_LINE = System.getProperty("line.separator");
result.append(NEW_LINE + " Status: " + s + NEW_LINE);
return result.toString();
}
}
还没有定义ABANDONED
,所以我只在最后添加了它。
根据您的编辑。您遇到的问题是该类的名称被嵌套并称为MyClass.Status
尝试
public static void main(String[] args) {
MyClass obj = new MyClass();
//PROBLEM SETTING STATUS HERE
//I can't do this:
MyClass.Status s = MyClass.Status.STATUS_OPEN;
}
BTW:您的IDE应该能够自动修复此错误。
我看到的唯一编译错误是您使用过
Status myStat = Status.ABANDONED;
未定义。我建议您添加此枚举或使用您定义的枚举。
我通过在类外部创建一个非静态枚举来解决此错误。
public enum Status {
STATUS_OPEN(1),
STATUS_STARTED(2),
STATUS_INPROGRESS(3),
STATUS_ONHOLD(4),
STATUS_COMPLETED(5),
STATUS_CLOSED(6),
ABANDONED(7);
private final int status;
Status(int stat) {
this.status = stat;
}
public int getStatus() {
return this.status;
}
}
创建的没有内部枚举块的MyStatus类:
public class MyStatus {
private Status s;
public void setStatus(Status stat) {
s = stat;
}
public void TestingEnum() {
Status myStat = Status.ABANDONED;
setStatus(myStat);
}
@Override
public String toString() {
StringBuilder result = new StringBuilder();
String NEW_LINE = System.getProperty("line.separator");
result.append(NEW_LINE + " Status: " + s + NEW_LINE);
return result.toString();
}
}
为我解决。
您将无法在main()
中引用状态,因为状态为public
时不是static
。您将需要创建封闭类的实例,然后使用它来创建枚举的实例:
MyEnclosingClass clz = new MyEnclosingClass();
Status status = clz.new Status();
这应该可以解决我认为您可能会遇到的错误。