所以我有点困惑,因为我从未使用过enum。我想在我的main方法中使用这个枚举。出于某种原因,我不能(我甚至在我主要尝试Status s;
时随时都会收到错误)。然而,我可以从main调用我的TestingEnum
方法,当然这可行...但我100%确定以这种方式使用枚举是完全错误的。有人可以告诉我,我是如何正确使用它的吗?
如果我尝试这样做:状态s;在我的主要方法中,我收到此错误 - "找不到符号状态s;"
背景:java和enums的新手......
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;
}
}
答案 0 :(得分:6)
将枚举移动到自己的类文件中,或者通过引用封闭类来访问它。
看起来你将Enum定义为另一个类的内部类。如果您正在执行此操作,则需要使用语法OuterClass.Status
访问它才能访问它。你把它公开了,这样才行。你可以在课堂上访问它,没有任何问题,因为它包含在父类的范围内。
因此,您可以在OuterClass.
之前添加Status
,也可以像其他任何类一样将Enum移动到自己的文件中。
答案 1 :(得分:0)
从有限的代码我认为问题是你试图访问
public Status s;
这不是静态方法main
的静态public static void main(String[] args) {
...
}
从main创建一个类的实例,并在该实例上使用方法使用s或将s声明为静态。
答案 2 :(得分:0)
根据您的修改。您遇到的问题是该类的名称是嵌套的,并称为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;
没有定义它。我建议你添加这个枚举或使用你定义的。
答案 3 :(得分:0)
你不能只是在像这样的公共类之前实例化一个枚举。解决问题的一种方法是使用一个外部类,将您的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
也未定义,所以我最后添加了它。
答案 4 :(得分:0)
我通过在类外部创建一个非静态枚举来解决此错误。
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();
}
}
为我解决。
答案 5 :(得分:-2)
您无法在main()
中引用状态,因为状态为public
时,它不是static
。您需要创建封闭类的实例,然后使用它来创建枚举实例:
MyEnclosingClass clz = new MyEnclosingClass();
Status status = clz.new Status();
这应该可以解决我相信你可能会遇到的错误。