Значение слова "видимость" неоднозначно в литературе Java? - PullRequest
0 голосов
/ 03 июня 2018

Сначала немного контекста.Насколько я понимаю, есть две взаимосвязанные, но разные концепции:
1. Доступность .Это относится к использованию public, protected, private для управления доступом к членам класса и самим классам.
2. Именование .Учитывая, что сущность доступна в первую очередь, это относится к необходимости использования простых имен или полностью определенных имен (например, myOrg.myPackage.myClass) и связано с операторами import, что позволяет использовать простые имена.

Одно из определений "видимости" в Java касается # 1:
https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html.

Однако в JLS, "видимость" и "видимость", кажется, касаютсяс # 2: https://docs.oracle.com/javase/specs/jls/se8/html/jls-6.html#jls-6.4.1

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

Сказано объявление dбыть видимым в точке p в программе, если область действия d включает в себя p, и d не затеняется никаким другим объявлением в p.

Согласно этому определению, даже если в моем случае myMemberpublic класс myClass объявлен public, он не будет считаться видимым, поскольку на него нельзя ссылаться простым именем (нужно использовать myOrg.myPackage.myClass.myMember).

Прав ли я вмоя интерпретация этих двух употреблений термина "видимость" несет различную семантику и используется в неоднозначно?У меня проблемы с примирением.

1 Ответ

0 голосов
/ 03 июня 2018

Учебные руководства по Oracle Java выглядят как «живые документы» без явной нумерации версий.Вообще говоря, их следует читать как описание «текущей» версии Java;т.е. версия описана по последним спецификациям.Таким образом, вы должны сравнивать руководства с версией спецификации языка Java (JLS) для Java 10.

Как отмечает @Radiodef, вы связались с JLS Java 8.В Java 9 и более поздних версиях термин «видимость» больше не используется для обозначения области видимости и сокрытия объявлений.Термин «видимость» теперь используется в двух контекстах:

  • , когда речь идет о том, какие пакеты и классы видны из разных модулей Java 9+, и
  • , когда речь идет о видимостиизменения переменных из разных потоков в контексте модели памяти Java.

Использование «видимости», которое вы обнаружили в Java 8 JLS, больше не применяется.(Да, терминология меняется.)


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

Расхождения могут быть преднамеренными, или они могут быть упущением,или это может быть просто «кто-то» позади при обновлении учебников.Я понимаю, что разные люди / группы несут ответственность за спецификации и учебники.Конечно, разные навыки необходимы для написания / редактирования двух комплектов документов, потому что (частично) документы предназначены для разных аудиторий.


Итог:

  1. Если вы хотите / нуждаетесь в технически правильной терминологии Java, обратитесь к определениям в последней версии JLS.

  2. Takeучебники с зерном соли.Они не являются окончательными.

...