Главная » Java » Реализация вложенных типов

0

 

Если бы компилятор и исполняющая система справлялись с вложенными типами самостоятельно, без усилий со стороны программиста, это было бы просто замечательно. К сожалению, дело обстоит не совсем так. Вложенные типы были добавлены в язык как дополнительное расширение, и создателям Java пришлось заботиться об обеспечении обратной совместимости со старыми версиями виртуальных машин Java. Следовательно, реализация модели вложенных типов заведомо предполагает выполнение компилятором специальных функций преобразования исходного кода.

Как программисту, решающему прикладные задачи, вам необходимо знать только об одной стороне этого процесса, а именно о соглашениях по поводу использования имен. Рассмотрим статический, Т.е. не локальный, вложенный тип, определенный как OuterInner. Это исходное имя класса. На своем уровне виртуальная машина Java выполняет переименование класса в Outer$Inner – по сути, просто заменяя символ точки символом доллара. Что касается локальных внутренних классов, результаты преобразования их имен не слишком важны, поскольку такие классы просто не доступны – в качестве имен могут быть использованы, например, Outer$l, Outer$2 и т.д., а также идентификаторы иного вида.

Со всеми этими вещами вам придется сталкиваться только в двух случаях.

Во-первых, приступая к сборке программного проекта, вы должны быть осведомлены о назначении файлов со "странными" именами, в которых употребляется символ $. Во-вторых, обращаясь к механизму рефлексии (мы расскажем о нем в главе 11) для создания экземпляров вложенных классов, вы обязаны понимать, как преобразуются имена типов. Но в обычной практике программирования подобным вопросам не стоит уделять повышенного внимания.

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии