2013-06-19 58 views
2

如果之前回答了這個問題,我很抱歉。我做了一個搜索,但沒有找到。我試圖將我的Enum定義爲下面的工作正常。Unabel在定義值之前在Enum中定義int變量

public enum MyEnum { 

    PRODUCT,STORE,PROMOTION,VOUCHER,URL; 

    private int value; 


} 

但是當我把它定義爲它下面無法識別INT令牌。這是爲什麼?

public enum MyEnum { 

    private int value; 

    PRODUCT,STORE,PROMOTION,VOUCHER,URL; 

} 
+0

您如何訪問該值? – fge

+0

請注意,此值將爲每個枚舉常量定義;它不是一個類變量。不知道爲什麼你需要聲明這樣的變量_after_枚舉常量聲明雖然... – fge

+0

@fge我打算添加一個int arg的構造函數,並將其設置爲枚舉值。 –

回答

6

如果你讀了documentation它說

Java的要求常量首先定義,任何字段或方法之前。另外,當有字段和方法時,枚舉常量列表必須以分號結尾。

+0

感謝DevZero爲您的答案 –

+0

@SanjayaLiyanage您的歡迎 – DevZer0

3

枚舉常量必須在任何其他變量和方法的聲明在枚舉類型之前進行聲明。如果枚舉僅聲明其中的值,則分號是可選的。否則,聲明值末尾的分號是強制性的。例如,你需要「;」在藍色(「藍色」)的末尾。

What can or can not for the Java enum type when you use it?

+0

這是一個報價?如果是考慮添加鏈接。 – Craig

+0

@克雷格添加鏈接。感謝您的建議。 – iMBMT

+1

+1供參考 – Craig

2

附錄(這個問題已經回答了,這是一個HOWTO):如果你想添加構造一個枚舉,該參數的構造函數必須連接到枚舉常量自己:

public enum MyEnum 
{ 
    VALUE1(1); 

    private final int value; 

    // Constructors of enums are private by default, 
    // no need to specify the access modifier 
    MyEnum(final int value) 
    { 
     this.value = value; 
    } 

    public int getValue() 
    { 
     return value; 
    } 
} 

請注意,您還可以添加方法:

public enum MyEnum 
{ 
    VALUE1 
    { 
     @Override 
     public int getValue() 
     { 
      return 0; 
     } 
    }; 

    public abstract int getValue(); 
} 

而且你可以結合兩者;在這種情況下,首先提到的是數值,然後是方法實現,例如:

VALUE("foo", 32) 
{ 
    @Override public int method1() { // whatever } 
    @Override public String method2() { // whatever } 
}; 
+0

感謝兄弟。這是我計劃要做的。這裏是我的+1,雖然我接受來自DevZero –

+0

@SanjayaLiyanage的第一個答案沒有問題;)枚舉在Java中非常強大。 – fge