Java: как ссылаться на нестатическое поле внешнего класса из статического вложенного класса? - PullRequest
2 голосов
/ 27 ноября 2011

Есть ли способ сослаться на нестатическое поле внешнего класса из статического вложенного класса?

Пожалуйста, смотрите мой код ниже:

public class TestComponent {
    String value;

    public void initialize(String value) {
        this.value = value;
    }

    public static class TestLabel extends GenericForwardComposer {
        Label testLabel;
        @Override
        public void doAfterCompose(Component comp) throws Exception {
            super.doAfterCompose(comp);
            testLabel.setValue(value);
        }
    }
}

Этот код выдает ошибку в testLabel.setValue (значение), когда я пытаюсь сделать статическую ссылку на нестатическое поле.Но мне нужно, чтобы значение было нестатичным и все же ссылалось на него в методе статического вложенного класса.Как мне это сделать?

Вы можете заметить, как я создаю экземпляр TestComponent.java здесь: http://top.cs.vt.edu/~vsony7/patches/gfc.patch

Идея состоит в том, чтобы динамически создать две метки с двумя разными значениями «Метка 1» и «Метка 2» и добавить ихк двум различным компонентам, т.е. vlayout1 и vlayout2.Но когда я запускаю этот код, метка прикрепляется к каждому из макетов, но значение обеих меток равно «Метка 2».Вы можете проверить это по адресу:

Проблема в том, что два окна из testlabel.zul, созданные двумя вызовами IncludeBuilder, совместно используют статический класс TestLabel.После super.doAfterCompoe () значение тестовой метки устанавливается в «Метка 2» в обоих вызовах.

Я использую Zk Framework, и у ZK нет включающего экземпляра, поэтому внутренний вложенный класс TestLabel должен быть статическим.

Спасибо, Sony

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Внутренний класс не может быть статическим, чтобы это работало.Он должен иметь доступ к включающему экземпляру TestComponent для ссылки value.Уберите статический модификатор.

2 голосов
/ 27 ноября 2011

Внутренние статические классы не могут получить доступ к переменным-членам окружающего класса без ссылки на объект.Внутренние статические классы действуют как статические классы верхнего уровня, просто упакованные внутри класса.

Учебное пособие по вложенным классам.

Лучшей альтернативой может быть создание экземпляра, передающегоvalue экземпляра в качестве параметра или вызов метода с ним в качестве параметра.

...