Статический импорт - Static import

Статический импорт это функция, представленная в Язык программирования Java который позволяет членам (полям и методам), которые были ограничены в их классе контейнера как публичная статика, который будет использоваться в коде Java без указания класса, в котором определено поле. Эта функция была введена в язык в версия 5.0.

Эта функция предоставляет безопасный механизм для включения константы в код без ссылки на класс, который изначально определил поле. Это также помогает отказаться от практики создания постоянный интерфейс (ан интерфейс который определяет только константы, а затем пишет класс, реализующий этот интерфейс, что считается неправильным использованием интерфейсов.[1])

Механизм можно использовать для ссылки на отдельные члены класса:

импорт статических java.lang.Math.PI;импорт статических java.lang.Math.pow;

или все статические члены класса:

импорт статических java.lang.Math. *;

Например, этот класс:

общественный учебный класс Привет, мир {    общественный статический пустота главный(Строка[] аргументы) {        Система.из.println("Привет, мир!");        Система.из.println(«Учитывая круг диаметром 5 см, он имеет»);        Система.из.println("окружность" + (Математика.ЧИСЛО ПИ * 5) + " см");        Система.из.println("и площадь" + (Математика.ЧИСЛО ПИ * Математика.пау(2.5, 2)) + "кв. см");    }}

Вместо этого может быть записано как:

импорт статических java.lang.Math. *;импорт статических java.lang.System.out;общественный учебный класс Привет, мир {    общественный статический пустота главный(Строка[] аргументы) {        из.println("Привет, мир!");        из.println(«Учитывая круг диаметром 5 см, он имеет»);        из.println("окружность" + (ЧИСЛО ПИ * 5) + " см");        из.println("и площадь" + (ЧИСЛО ПИ * пау(2.5, 2)) + "кв. см");    }}

Двусмысленность

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

импорт статических java.lang.Integer. *;импорт статических java.lang.Long. *;общественный учебный класс Привет, мир {    общественный статический пустота главный(Строка[] аргументы) {        Система.из.println(MAX_VALUE);    }}

В этом случае, MAX_VALUE неоднозначно, поскольку MAX_VALUE поле является атрибутом обоих java.lang.Integer и java.lang.Long. Префикс поля с его именем класса устранит неоднозначность класса, из которого MAX_VALUE является производным, но при этом статический импорт становится избыточным.[2]

Примечания

Рекомендации