Was bedeutet eine Tilde in spitzen Klammern beim Erstellen einer generischen Java-Klasse?

127

Ich habe einige JMockit-Beispiele gelesen und diesen Code gefunden:

final List<OrderItem> actualItems = new ArrayList<~>();

Was bedeutet die Tilde im generischen Bezeichner? Ich weiß, dass es der unäre bitweise NICHT-Operator ist, aber ich sehe hier keinen Operanden.

Außerdem habe ich versucht, es zu kompilieren und habe einen Fehler erhalten. Vermisse ich nur etwas?

Michael K.
quelle

Antworten:

158

Es ist nur eine Abkürzung für "wie in der Erklärung".

Einige IDEs, z. B. IntelliJ, verwenden dies ebenfalls.

Die Dateien auf der Festplatte haben diese Notation nicht. Dies ist nur eine Komprimierung in der IDE-GUI.

openCage
quelle
1
Es war ein Intellij-Screenshot.
Michael K
Nur zur persönlichen Verdeutlichung - IntelliJ erstellt Java-Quelldateien mit dieser Notation, iaw, Quelldateien mit illegalem Java-Inhalt ??? Oder ist dies nur die Ansicht der Quelle und die gespeicherte Datei ist korrekt?
Andreas Dolk
5
@Andreas_D: Es ist nur eine Ansicht. Die Dateien auf der Festplatte sind in Ordnung.
openCage
6
Tatsächlich ist die Tilde grau (um anzuzeigen, dass sie anders ist), und wenn Sie darauf klicken, wird sie zur vollständigen Definition erweitert.
Yshavit
1
Dies kann in den Intelij-Einstellungen für Editor / Allgemein / Code-Faltung deaktiviert werden.
Ocie Mitchell
16

Wenn es keine Tilde gäbe, würde ich sagen, der Code war bereits Java 7. Java 7 erlaubt dem Diamond-Operator, also ist / ist dies legaler Java-Code:

Map<String, List<String>> map = new HashMap<>();

(aber - keine Tilde mit dieser Syntax)

Andreas Dolk
quelle
9

In IntelliJ IDEA ist das ~hier:

Set<String> associations = new LinkedHashSet<~>();

bedeutet String, das ist das gleiche wie in der Erklärung auf der linken Seite.

Zinan Xing
quelle
2

Ich denke, das ist eine Abkürzung für den Typ, in diesem Fall OrderItem .

Andrew White
quelle