Действительно ли внутренние классы являются наиболее часто используемыми в Java? Они “плохо”? [закрытый]

Если вы подразумеваете под новой строкой символ новой строки , то это \ n , а \ r - символ возврата носителя , но если Под новой строкой подразумевается конец строки, тогда это зависит от операционной системы: DOS использует возврат каретки и перевод строки ( "\ r \ n" ) в качестве окончания строки, а Unix использует только перевод строки ( "\ п" )

21
задан johnny 22 June 2009 в 07:58
поделиться

6 ответов

Inner classes are frequently used, and something very similar - anonymous classes - are practically indispensable, as they are the closest thing Java has to closures. So if you can't remember where you heard that inner classes are bad, try to forget about it!

31
ответ дан 16 October 2019 в 23:39
поделиться

Они не «плохие» как таковые.

Они могут подвергаться злоупотреблениям (например, внутренние классы внутренних классов). Как только мой внутренний класс занимает больше нескольких строк, я предпочитаю выделить его в отдельный класс. Это способствует удобочитаемости и в некоторых случаях тестированию.

Есть одна проблема, которая не сразу очевидна и о которой стоит помнить. Любой не статический внутренний класс будет иметь неявную ссылку на окружающий внешний класс (неявная ссылка this). Обычно это не проблема, но если вы приступите к сериализации внутреннего класса (скажем, используя XStream ), вы обнаружите, что это может вызвать у вас неожиданное горе.

19
ответ дан 16 October 2019 в 23:39
поделиться

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

Я бы сказал, что одна из проблем с внутренними классами заключается в том, что их синтаксис несколько «уродлив». Это то, что некоторых людей обескураживает. Здесь на работе их много.

4
ответ дан 16 October 2019 в 23:39
поделиться

Хорошим примером внутреннего класса является реализация итератора для данного типа коллекции. Это класс, который реализует общедоступный интерфейс, но не имеет никакого бизнеса, кроме как в ассоциации с другим классом. Это позволяет вам моделировать вещи, которые в C ++ вам придется делать с помощью оператора friend.

2
ответ дан 16 October 2019 в 23:39
поделиться

Они полезны и могут очень часто использоваться. Хотя вы должны быть осторожны с злоупотреблением функциональными возможностями, они не намного больше подвержены злоупотреблениям, чем любые другие языковые функции.

1
ответ дан 16 October 2019 в 23:39
поделиться

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

Некоторые другие проблемы с нестатическими внутренними классами описаны здесь

2
ответ дан 16 October 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: