Я не думаю, что есть порядок поиска в том смысле, который вы имеете в виду. Скорее, я считаю, что это правило применяется:
6.5.5 Meaning of Type Names The meaning of a name classified as a TypeName is determined as follows.
6.5.5.1 Simple Type Names If a type name consists of a single Identifier, then the identifier must occur in the scope of exactly one visible declaration of a type with this name, or a compile-time error occurs. The meaning of the type name is that type.
В этом контексте импорт считается декларацией; см. JLS 6.1. Однако усложняющим фактором являются правила Shadowing (JLS 6.3.1), которые говорят, что некоторые виды объявлений (типов в этом случае) скрывают существующие объявления, а другие - нет. В частности, «импорт по требованию» (например, import java.util.*;
или неявный импорт java.lang.*
) не затеняет другие объявления.
Так, например;
package foo;
import java.sql.Date;
import java.util.*; // import on demand: java.util.Date does not shadow java.sql.Date
import java.awt.*; // import on demand: java.awt.List does not shadow java.util.List
class Integer { // (foo.)Integer shadows java.lang.Integer
...
static class Integer { // (foo.Integer.)Integer shadows foo.Integer.
...
List t = ... // Compilation error, because there are currently two visible
// declarations of List (JLS 6.5.5.1)
}
}
Другой морщин является то, что «однотипный-импорт» (как import java.sql.Date;
выше) тени типов, объявленных в том же пакете, и типов импортируемых по требованию, но это не тени других типов, импортированных с помощью другого " однотипный импорт "(JLS 6.3.1). Так, например, следующая ошибка компиляции:
import java.sql.Date;
import java.util.Date; // Compilation error
Отличный ответ. Спасибо! – Gili