2012-12-13 33 views
4

我有一個來自示例項目的類。但是當我使用這個類時,它顯示了一些錯誤。這個類在下面給出。如何在Java中擴展Enum?

public class q extends Enum 
{ 

    private int i = -1; 
    private String s = null; 

    private q(String s, int i) 
    { 
     // super(s, i); 
     this.s = s; 
     this.i = i; 
    } 

    public static q valueOf(String s) 
    { 
     return (q)Enum.valueOf(q.class, s); 
    } 

    public static q[] values() 
    { 
     return (q[])a.clone(); 
    } 

    public static final q ANDROID_VERSION; 
    public static final q APP_VERSION_CODE; 
    public static final q APP_VERSION_NAME; 
    public static final q AVAILABLE_MEM_SIZE; 
    private static final q a[]; 

    static 
    { 
     APP_VERSION_CODE = new q("APP_VERSION_CODE", 1); 
     APP_VERSION_NAME = new q("APP_VERSION_NAME", 2); 
     ANDROID_VERSION = new q("ANDROID_VERSION", 6); 
     AVAILABLE_MEM_SIZE = new q("AVAILABLE_MEM_SIZE", 11); 
     q aq[] = new q[34]; 
     aq[0] = APP_VERSION_CODE; 
     aq[1] = ANDROID_VERSION; 
     aq[2] = APP_VERSION_NAME; 
     aq[3] = AVAILABLE_MEM_SIZE; 
     a = aq; 
    } 

} 

當延伸枚舉顯示「類型q可以不繼承枚舉明確」 error.How我可以創建使用這些字段的枚舉?

我如何修改這個類使用像枚舉(即,我想使用默認枚舉方法像ordinal(),valueOf(...)等等..)。

回答

5

您不能從Enum延伸。你要申報Enum類,如:

public enum Q { 
    TYPE1, TYPE2, TYPE3; 
} 

而且你還不能直接實例化一個枚舉類。每種類型的枚舉類都只由虛擬機實例化一次。

public class MyClass { 

    public enum MyEnum{ 
     TYPE1("Name", 9,1,100000), TYPE2("Name2", 10, 1, 200000); 

     private final int androidVersion; 
     private final int appVersionCode; 
     private final int availableMemSize; 
     private final String appVersionName; 

     private MyEnum(String appVersionName, int androidVersion, int appVersionCode, int availableMemSize) { 
      this.androidVersion = androidVersion; 
      this.appVersionCode = appVersionCode; 
      this.availableMemSize = availableMemSize; 
      this.appVersionName = appVersionName; 
     } 
    } 
    MyEnum mType = MyEnum.TYPE1; 
} 
+0

使用此格式時,顯示錯誤「無法實例化類型q」 –

+0

您想要做什麼? – thaussma

+0

你能告訴我一個來自上述代碼的例子嗎? –

3

-認爲enum關鍵字作爲語法糖的。它爲您設置了具有正常繼承樹的類,但不允許您擴展java.lang.Enum

如:

public enum TEST { 
    ONE, TWO, THREE; 
} 
+0

請問你可以給我看一個上面代碼的例子嗎? –

5

枚舉基本上歸結爲這樣的事:

public Enum Q 
{ 
    TYPE1, TYPE2, TYPE3: 
} 

// is roughy translated to 

public final class Q 
{ 
    private Q() {} 

    public static final Q TYPE1 = new Q(); 
    public static final Q TYPE2 = new Q(); 
    public static final Q TYPE3 = new Q(); 
} 

還有更多你可以做,但是這應該解釋爲什麼你不能實例Q