Pull to refresh

Comments 12

Странно, что минусуют, мне было полезно и интересно почитать, ибо скоро экзамен по Java. Вот такие статьи очень хорошо помогают посмотреть со стороны на определенную тему и, возможно, что-то новое подметить. Можно только пожелать удачи автору :)
У автора адище с оформлением постов и кода, да и тему он размазал на несколько постов, хотя она отлично умещалась в одном.
UFO just landed and posted this here
Не советую читать такое перед экзаменом. Почитайте лучше оригинал. Родная документация сильно лучше — а это не более чем ее кривой пересказ.
>Например, Map.Entry — нигде кроме интерфейса Map и его реализаций он не нужен.

Во-первых, Map.Entry это интерфейс, а не класс. Во-вторых, он часть внешнего API Map. И нужен всем, кто использует например entrySet().

Плохой пример, негодный.
Я вообще не врубился в чем разница между «вложенными» и «внутренними» классами. Возможно какая-то неточность изложения?
Я ни разу на Java ничего не писал, поэтому могу ошибаться:) Но ИМХО:
Есть статическая вложенность, то есть объемлющие классы используются просто как пространства имен. Логично, что никакого доступа к нестатическим полям из статически вложенного класса быть не может. Полная аналогия со статическими методами.
И есть нестатическая вложенность. Для нее по идее внутри каждого экземпляра вложенного класса должно быть скрытое поле — указатель/ссылка на объект объемлющего класса, к которому относится данный вложенный класс (отсюда и создание через конструкцию outerObject.new InnerClass() ). Это полная аналогия с обычными методами, которые принимают неявный параметр this — указатель/ссылку на объект класса, для которого вызывается метод (отсюда констукция Outer7.this).
Кстати, интересно — есть ли в Java ключевое слово, само по себе обозначающее текущий объемлющий класс или сразу ссылку на его контекст (по аналогии с this и super)?.. Было бы логично, но я ничего подобного не встречал.
UFO just landed and posted this here
Кстати интересно, в каких еще языках есть такая возможность.
В С++ точно нет, там вложенность классов это просто просто использование объемлющего класса как пространства имен.
В C# вроде тоже нет.
Но поле — ссылку/указатель на объемлющий класс можно объявлять во вложенном классе явно и явно передавать в конструктор вложенного класса, т.е. можно явно сэмулировать поведение как в java.
В D вроде бы есть, и вроде аналогично Java.

А вот ключевого слова (аналогичного this) для прямого доступа к объекту объемлющего класса вроде как нигде нет. Какое слово лучше всего подошло бы?
И вообще удобна ли такая логика по умолчанию, или лучше как в С++/C# (только пространства имен)? Что скажут люди, имеющие опыт с Java?
Нестатический вложенный класс называют внутренним (inner).
Sign up to leave a comment.

Articles