Betrachten Sie dieses Beispiel:selbstbezüglicher generische Typen
public final class Main<T extends Main<T>> {
public static void main(String[] args) {
Main<?> main = new Main<>();
}
}
Das perfekt kompiliert. Wenn ich jedoch versuche, diese Kompilierung ohne Verwendung der Raute durchzuführen, kann ich sie nur mit einem Rohtyp ausführen.
Main<?> main = new Main();
Versuche ohne rohe Typen funktionieren nicht:
Main<?> main = new Main<?>(); // None of
Main<?> main = new Main<Main<?>>(); // these
Main<?> main = new Main<Main<Main<?>>>(); // compile
Warum also die ursprüngliche Version mit dem Diamant Arbeit? Was ist der abgeleitete Typ, wenn Sie Main<?> main = new Main<>();
schreiben?
Folgt es einem rohen Typ, oder leitet es eine Art von unendlich verschachtelten Typen ab?
Main<Main<Main<Main<...>>>>
Ich denke, Sie sollten "Main" mit "Buffalo" in diesem Beitrag ersetzen. – djechlin
Sie haben also die endlose Rekursion im Java Compiler erfunden. Netter Job, wie es! – gaborsch
'Enum' hat eine ähnliche Deklaration, also was du vorfindest, ist nichts neues. – Makoto