2013-01-19 28 views
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; 
    } 
} 

枚舉是公開的,因爲我得到「用戶有私人訪問錯誤」,否則。我知道枚舉是一個在構造函數中聲明的非靜態變量,所以我認爲這是錯誤的來源,但我不知道如何解決它。

回答

6

這個問題與枚舉變量無關,一切與靜態字段和類與非靜態字段和類有關。需要注意的是,當你寫

Car.user.NONE 

Car.userCar類命名user - 但Car.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"); 
} 
+3

根據[此問題](http://stackoverflow.com/q/663834/1169798),枚舉隱式地是'static'。 – Sirko

+0

謝謝,你完全正確。編輯。 –

相關問題