Статический импорт - 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]