Используя средство статического импорта, нужно быть очень внимательным, чтобы не создать неоднозначных ситуаций. Если у двух классов или интерфейсов используется одно и то же имя для статического члена, и оба эти класса или интерфейса импортируются в один и тот же блок компиляции, компилятор не знает какое из этих имен выбрать, если они применяются без уточнения с помощью имени класса. Например, предположим, что в пакет MyMsg из листинга 8.4 включен приведенный в листинге 8.5 класс, в котором также объявлено статическое поле, названное UPPER.
Листинг 8.5. Неоднозначность, возникающая при статическом импорте
package MyMsg;
public class X {
public static final int UPPER = 11;
// ...
}
Если статические члены класса из листинга 8.5 импортируются в программу, которая также импортирует статические члены класса Msg, возникнет неоднозначность, как только обнаружится идентификатор UPPER. Например, в приведенных далее операторах статического импорта:
import static MyMsg.Msg.*;
import static MyMsg.X.*;
неуточненное имя UPPER ссылается на поле Msg.UPPER или на поле X.UPPER? |