JLS: Chapter 7. Packages:Reihenfolge der automatisch importierten Paketen und Mehrdeutigkeit
Ein Paket besteht aus einer Anzahl von Übersetzungseinheiten (§ 7.3). Eine Kompilierungseinheit hat automatisch Zugriff auf alle in ihrem Paket deklarierten Typen und importiert automatisch alle öffentlichen Typen, die im vordefinierten Paket java.lang deklariert sind.
Hier können Sie den folgenden Code annehmen:
package com.example.p1;
public class MyClass { }
package com.example;
public class MyClass { }
package com.example;
public class String { }
package com.example;
import com.example.p1.*;
public class MainNameClash {
private String s; // No Error, even though ambiguous with java.lang.String!
private MyClass m; // No error, even though ambiguous with com.example.p1.MyClass!
}
Wenn ich MyClass
von com.example
inbewegenund importieren Sie es mit import com.example.p2.*
, ich bekomme Error: the type MyClass is ambigious
an der Stelle, wo es verwendet wird.
Es scheint, dass die Typen aus dem Paket selbst immer Vorrang vor allen anderen importierten Typen haben, sei es automatisch von java.lang
oder explizit mit einem Platzhalterimport, und dass der Compiler keine Warnung oder Fehler ausgibt.
Frage:
- Warum wird der Java-Compiler keine Zweideutigkeit Fehler in diesem Fall emittieren?
- Wo in der JLS ist dieses Verhalten definiert?