我有静态问题,这个程序不能编译。编译器说
Enums.java:27: non-static variable this cannot be referenced from a static context
SexEnum a = new SexEnum(Sex.MALE);
^
Enums.java:28: non-static variable this cannot be referenced from a static context
SexEnum b = new SexEnum(Sex.FEMALE);
但是,如果我在下一行添加“静态”关键字,一切都会好起来的。
public static class SexEnum{
/////////////////////////////////////////////// /////////////////////////////////////
public class Enums{
enum Sex{MALE, FEMALE};
public class SexEnum{ // something wrong this line
private Sex sex;
public SexEnum(Sex sex){
this.sex = sex;
}
public void info(){
Sex s = this.sex;
switch(s){
case MALE:
System.out.println("I'm a male.");
break;
case FEMALE:
System.out.println("I'm a female.");
break;
default:
System.out.println("I'm not a human.");
break;
}
}
}
public static void main(String[] argv){
SexEnum a = new SexEnum(Sex.MALE);
SexEnum b = new SexEnum(Sex.FEMALE);
a.info();
b.info();
}
}
有人可以向我解释一下吗?谢谢。
答案 0 :(得分:3)
我认为您可以通过将info
方法转换为enum
而不是创建包装类来消除所有问题:
public class Enums{
public enum Sex {
MALE, FEMALE;
public void info(){
System.out.printf("I'm a %s.%n", this.toString().toLowerCase());
}
}
public static void main(String[] argv){
Sex a = Sex.MALE;
Sex b = Sex.FEMALE;
a.info();
b.info();
}
}
Java枚举也是类,因此您可以添加方法,字段等。
答案 1 :(得分:0)
问题在于你试图实现一个内部类,只有从上层的instanciated对象中执行它才能实现。 但是如果类是静态的,它不依赖于上层类,并且任何其他对象都可以实现它。