1

以下のコード例では、親クラスの列挙型の値をテストしようとしています。私が得るエラーは「p.theEnumを解決できないか、フィールドではありません。」ですが、値をテストするために親クラスで使用するコードとまったく同じです(明らかにp.なし)。

どこが間違っていますか?:)

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

2 に答える 2

4

次のように変更するだけです。

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

資格を取る必要はありません。

(参考までに、このようなサンプルを問題の領域とは別にコンパイルしていただけると助かります。コンパイルする前に、上記のもの以外にもかなりの変更を加える必要がありました。)

于 2010-08-06T09:14:51.817 に答える
1

theParent 内からクラスを使用しているため、実際に修飾する必要はありません。

ただし、資格を取得する必要はありませんが、資格を取得することは可能です。

エラーが発生する理由は、それtheEnumが静的内部クラスであるためですが、修飾子は、インスタンス化の一部としてインスタンスp.theEnumを必要とする非静的内部クラスを示しています。pここでは、enum が static として宣言されているため、それを修飾する正しい方法はtheParent.theEnum.

于 2010-08-06T09:27:28.497 に答える