Перечисление родителей в Java - PullRequest
1 голос
/ 06 августа 2010

В приведенном ниже примере кода я пытаюсь проверить значение перечисления в родительском классе.Я получаю сообщение об ошибке: «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) { }
        }
    }
}

Ответы [ 2 ]

4 голосов
/ 06 августа 2010

Просто измените его на:

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

Нет необходимости его квалифицировать.

(Точно так же, как к вашему сведению, было бы полезно, если бы вы делали сэмплы наподобие этой компиляции отдельно от проблемной области - мне пришлось сделать немало изменений по сравнению с приведенным выше, прежде чем я смог это скомпилировать.)

1 голос
/ 06 августа 2010

Поскольку вы используете класс из theParent, вам на самом деле не нужно его квалифицировать.

Но, хотя вам и не нужно готовиться, квалификация все же должна быть возможной.

Причина, по которой вы получаете ошибку, состоит в том, что theEnum - статический внутренний класс,квалификатор p.theEnum указывает на нестатический внутренний класс, для которого требуется экземпляр p как часть экземпляра.Здесь перечисление объявлено как статическое, поэтому правильный способ его определения - theParent.theEnum.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...