Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Обращение из внутреннего класса во внешний |
Автор: ShurikA 26.1.2007, 23:29 | ||||
Есть такое строение классов:
из В обратиться в А? во всяком слачае вот такой способ:
|
Автор: Anklav 27.1.2007, 00:21 | ||
объяви класс B не статическим:
статическому внутреннему классу ничего не известно о внешнем |
Автор: powerOn 27.1.2007, 00:23 | ||
Из статического внутреннего класса нельзя обращаться к не статическим полям и методам внешнего класса. Чтобы из класса B обратиться к не статическому методу или полю класса А нужно чтобы класс А был не статическим. (А чтобы создать экземпляр внутреннего не статического класса необходимо прежде создать объект внешнего класса:
|
Автор: ShurikA 27.1.2007, 16:18 | ||||
ОК, допустим я переделываю public static class B в public class B то с этим классом всё нормално. Но как только я пытаюсь зодать обьект класса В, вот таким образом:
когда ImgTmpl это В. то уже при работе проги (компиляцию она проходит хормално), вылетает ошибка:
и как с этом бороться? |
Автор: LSD 27.1.2007, 16:21 | ||
Как это при работе? ![]() ![]() |
Автор: ShurikA 27.1.2007, 16:39 | ||
Извиняюсь моя ошибка, при компиляции. Добавлено @ 16:41 вот этот кусок кода:
|
Автор: ShurikA 27.1.2007, 16:58 | ||
Проблемма решилась, но правда каким то странным образом: Создавать обьект нужно в таком слачае вот так:
когда dTmpl это типа класс А... Работает, но я не понимаю почему именно так... Кто то может пояснить, я явно тут чего то пропустил, в понимании. P.S. Мне сразу эта тема кое что напомнила: "У теоретиков ничего не работает, но они знают почему; у практиков всё работает, но не могу понять почему... У нас обычно ничего не работает, и мы не можем обьяснить почему!" ![]() |
Автор: ShurikA 27.1.2007, 17:13 |
Да, но в данный момент мои внутрение классы не статические. Добавлено @ 17:15 и ещё одно, что это озночает: http://www.thecatalog.biz/servlet/apisserver.ApisServer?act=get_template&tId=1 при этом компиляцию проходит без проблемм. |
Автор: powerOn 27.1.2007, 17:17 | ||||||||
Ну а мой пост выше ты читал? К статическим полям/методам любого класса можно обращаться по их именам (если конечно область видимости позволяет). Если поле - то по имени поля, если метод - то по имени метода, если внутренний статический класс, то создать его экземпляр можно используя конструкцию:
если же внутренний класс не является статическим, а создать его хочется, то необходимо сначала создать экземпляр внешнего класса, а потом только экземпляр внутреннего:
Из внутреннего статического класса нельзя получить доступ к нестатическим полям и методам внешнего класса. Из внутреннего нестатического класса можно, используя конструкцию:
|
Автор: LSD 27.1.2007, 17:17 |
Значит ты или вызываешь конструктор внутреннего класса из статического метода, или из метода объекта который не является enclosing class для данного внутреннего класса. |
Автор: ShurikA 27.1.2007, 17:17 | ||
Извините, но у меня уже руки опустились... Проблеммы просто одна за другой. ![]() Добавлено @ 17:23
правильно ли вместо new OutterClassName(param...) воспользоваться уже созданным обьектом этого класса? |
Автор: powerOn 27.1.2007, 17:34 | ||
Да, можно воспользоваться. Дополнительно, следует учесть, что один экземпляр внешнего класса может иметь много экземпляров внутреннего класса. А экземпляры внутреннего класса могут менять поля своего внешнего класса. |
Автор: ShurikA 27.1.2007, 17:37 |
ну вот притакой конфигурации вилетает ошибка показанная по ссылке... |
Автор: ShurikA 27.1.2007, 22:51 | ||||
что бы это могло означать, при том что цтрока 98 это:
|
Автор: ShurikA 28.1.2007, 01:58 | ||
Неужели ни кто незнает что это за хрень?
|
Автор: powerOn 28.1.2007, 02:06 |
Это хрень обычно вылетает когда с помощью рефлекшена пытаются дёрнуть метод который в классе отсутствует. Нужно под отладчиком смотреть что там происходит, так непонятно из-за чего.... ![]() |
Автор: ShurikA 28.1.2007, 02:17 |
![]() Добавлено @ 02:19 У меня есть небольшая проблемма с отладчиком. Это сервлет, и он на серваке... Мне просто MySQL нужен. Добавлено @ 02:21 Кроме того что за метод .<init> у меня его нету и я его и не пытаюсь вызвать... |
Автор: powerOn 28.1.2007, 02:39 |
Этот метод выполняет инициализацию полей класса. Он компилятором создаётся. Рефлекшион - http://java.sun.com/docs/books/tutorial/reflect/index.html. ![]() |
Автор: ShurikA 28.1.2007, 02:44 | ||||
И каким таким образом его может не быть? Добавлено @ 02:46 и что за странность:
|
Автор: powerOn 28.1.2007, 12:49 |
Этот метод всегда есть. Тут в не его отсутствии ошибка. Ошибка внутри него... вероятно ![]() |
Автор: ShurikA 28.1.2007, 13:32 |
Как можно помять как он формируется? |
Автор: LSD 29.1.2007, 11:05 | ||
Конструкторы тоже так обзываются. |