Во-первых, в JLS такие термины, как видимость, могут иметь разное значение применительно к единице компиляции, пакету или типу.
Некоторые ссылки, где термины определены в JLS:
Наблюдаемый:
Блок компиляции: §7.3, предложение, начинающееся "Хост-система определяет, какие единицы компиляции доступны для наблюдения".
Пакет: §7.4.3, первый абзац.
Интуиция: элементы, участвующие в компиляции.
Видимый:
Блок компиляции: §7.3, предложение, начинающееся с "Обычные единицы компиляции, видимые для M" — обратите внимание, что видимость определяется относительно модуля
Пакет: §7.4.3, предложение, начинающееся "Пакет виден модулю M" — снова относительно модуля.
Интуиция: элементы, наблюдаемые с точки зрения данного модуля с учетом requires
и exports
.
Доступно:
Кроме того, центральным новым понятием, начиная с JLS 9, является «уникальная видимость» (§7.4.3), а также термины "потенциально доступный", "читается" / "читается кем", "связанный с". Исторически сложилось так, что в JLS 9 проводилось дополнительное различие между «технически наблюдаемыми» и «действительно наблюдаемыми», которое было исключено с JLS 11.
Кроме того, исторически (до JLS 8) слово «видимый» использовалось в определении затенения (§6.4.1), но это использование было отменено в JLS 9.
Наконец, обратите внимание, что некоторые из этих понятий (явно или неявно) получают определение из API в java.lang.module
.
Я предлагаю рассматривать эти термины как технические термины, не предназначенные для обращения к интуиции более широкой аудитории, отчасти потому, что многие определения в JLS касаются «единиц компиляции», которые не нужны для интуитивного понимания. Для сравнения возможного интуитивного понимания с пониманием на основе JLS см. слайд № 20 из JDT использует Java™ 9 — взгляд инсайдеров.
person
Stephan Herrmann
schedule
06.12.2018