3
    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");

    }

このコードのビットは私に与えます:エラー:非静的変数ユーザーは静的コンテキストから参照できません。

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;
    }
}

そうしないと、「ユーザーにはプライベートアクセスエラーがあります」と表示されるため、列挙型は公開されています。enum はコンストラクター内で宣言された非静的変数であることを知っているので、これがエラーの原因であると考えていますが、修正方法についての手がかりがありません。

4

1 に答える 1

6

この問題は enum 変数とは関係なく、静的フィールドとクラスと非静的フィールドとクラスのすべてに関係しています。書くときの注意点

Car.user.NONE

Car.userクラスで名前が付けられたフィールドを参照しますが、静的変数ではなくインスタンス変数です。したがって、エラー:userCarCar.user

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

これを修正するには、式がフィールドではなくを参照するように変更Car.userします。Car.Userenum UserUser 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");
}
于 2013-01-19T18:44:26.570 に答える