Im folgenden Beispiel die import
ist notwendig, andernfalls wird die Java-Compiler beschweren sich, dass Nested
kann nicht auf einen Typ in Iterable<Nested>
gelöst werden:Warum muss ich eine geschachtelte Klasse in die definierte Klasse importieren?
package test;
import test.Example.Nested;
public class Example implements Iterable<Nested> {
public final static class Nested {}
}
(mit Iterable<Example.Nested>
anstelle eines Import funktioniert auch)
Diese tritt nur auf, wenn eine verschachtelte Klasse in der Definition der äußeren Klasse referenziert wird, z wenn es als parametrischer Typ verwendet wird, aber auch wenn es erweitert/implementiert wird (was zu einem anderen Fehler führt, sobald der Compiler die Klasse auflösen kann), oder wenn es als oder in einer Annotation verwendet wird.
Meine Frage ist: Warum kann der Compiler die geschachtelte Klasse nicht finden, ohne eine explizite Deklaration?
denke ich, OP Problem mit der Tatsache, dass die äußere Klasse in der Lage sein sollte, auf ihre geschachtelte Klasse ohne das Präfix "Äußeres" zuzugreifen. Zum Beispiel können Sie das 'Nested'-Feld innerhalb der' Example'-Klasse deklarieren, ohne die 'Example.Nested'-Typ-Deklaration verwenden zu müssen, aber Sie können sie nicht in 'Iterable' verwenden. –
Pshemo
@AmirPashazadeh: Nun, OP * muss * die Importklausel nicht verwenden; nach der Outer.Inner-Konvention wird funktionieren, und ist der typische Weg.Aber wenn er eine Antwort "Warum" möchte, ist das Beste, was ich geben kann, "So funktioniert Java". – Jimothy
@AmirPashazadeh: Wenn Ihr Einspruch der Link "Nested Classes" ist, habe ich ihn angegeben, weil er ua erläutert, wie auf verschachtelte Klassen (Outer.Inner) verwiesen wird. – Jimothy