如何从静态上下文引用枚举变量?

pro*_*rog 3 java enums

    if(array[3][3].getCall() == false && array[3][3].getUser() == Car.user.NONE )
    {
        array[3][3] = new Car('s', Car.user.USER, false);
        aCounter++;

        System.out.println("everything is fine");

    }
Run Code Online (Sandbox Code Playgroud)

这段代码告诉我:错误:无法从静态上下文引用非静态变量用户.

public class Car
{

    public enum User { USER, COMP, NA };

    private char object;
    public User user;
    private boolean call;

    public Car(char object, User user, boolean call)
    {
        this.object = object;
        this.user = user;
        this.call = call;
    }
}
Run Code Online (Sandbox Code Playgroud)

枚举是公开的,因为我得到"用户有私人访问错误".我知道枚举是一个在构造函数中声明的非静态变量,所以我认为这是错误的来源,但我不知道如何解决它.

Mat*_*all 6

该问题与枚举变量无关,与静态字段和类与非静态字段和类有关.请注意,当你写

Car.user.NONE
Run Code Online (Sandbox Code Playgroud)

Car.user指的是在类上命名的字段 - 但它是一个实例变量,而不是静态变量.因此,错误:userCarCar.user

non-static variable user cannot be referenced from a static context

要解决此问题,只需更改Car.userCar.User以便表达式引用enum User而不是User user字段.

if(array[3][3].getCall() == false && array[3][3].getUser() == Car.User.NONE )
{
    array[3][3] = new Car('s', Car.User.USER, false);
    aCounter++;

    System.out.println("everything is fine");
}
Run Code Online (Sandbox Code Playgroud)

  • 根据[这个问题](http://stackoverflow.com/q/663834/1169798),枚举是隐式的"静态". (3认同)