2010-08-06 86 views
1

在下面的代碼示例中,我試圖測試父類中枚舉的值。我得到的錯誤是「p.theEnum無法解析或不是字段。」,但它與父類中用於測試值的顯然是相同的代碼(顯然沒有顯示p)。Java中父母的枚舉

我哪裏錯了? :)

public class theParent { 
    protected static enum theEnum { VAL1, VAL2, VAL3 }; 
    private theEnum enumValue = theEnum.VAL1; 

    theParent() { this.theChild = new theChild(this); this.theChild.start(); } 

    class theChild { 
     private parentReference p; 

     public theChild (theParent parent) { this.p = parent; } 

     public void run() { 
      // How do I access theEnum here? 
      if (p.enumValue == p.theEnum.VAL1) { } 
     } 
    } 
} 

回答

4

只是將其更改爲:

if (p.enumValue == theEnum.VAL1) { } 

有沒有必要限定它。如果你將這些樣本編譯成問題區域以外的其他樣本,那麼在編譯之前,我必須從以外的中進行一些更改。 )

+0

啊歡呼聲。我遇到的問題是Enum實際上被稱爲State,它試圖使用Thread.State,因此存在p.theEnum而不僅僅是Enum :) 此外,對編譯不足感到抱歉。我只知道一些Java(我是一個PHP人學習它),所以我只是在textarea中盡力而爲:P我錯過了什麼? – JoeC 2010-08-06 09:21:00

+0

@JoeC:最好在IDE中提供簡短但完整的示例,以便您可以檢查它們。在這種情況下,你在'theChild'上調用'start',這是無效的,並且你有一個'parentReference'類型的變量而不是'theParent'。您還沒有聲明一個名爲'theChild'的字段,但是您在父構造函數中指定了它。我想也許還有其他人 - 不確定。另外,我會建議使用反映Java命名約定的名稱,因爲這會讓古怪的事物更加突出。 – 2010-08-06 09:38:52

1

由於您在theParent內部使用該類,因此實際上並不需要限定它。

但是,即使您不需要限定,仍應該可以限定。

你的錯誤的原因是,theEnum是一個靜態內部類,但p.theEnum限定符表示這需要instnace p作爲實例的一部分非靜態內部類。在這裏,枚舉被聲明爲靜態的,所以限定它的正確方法是theParent.theEnum

+0

已經回答並投票選出最有用(最快),但正確的方式來量化它是非常有用的,謝謝:) – JoeC 2010-08-06 09:29:59