| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
Конструкторы тоже так обзываются. |