¿Qué significa una tilde entre paréntesis angulares al crear una clase genérica de Java?

127

Estaba leyendo algunos ejemplos de JMockit y encontré este código:

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

¿Qué significa la tilde en el identificador genérico? Sé que es el operador NOT bit a bit unario, pero no veo un operando aquí.

Además, intenté compilarlo y obtuve un error. ¿Me estoy perdiendo algo?

Michael K
fuente

Respuestas:

158

Es solo una abreviatura de "igual que en la declaración".

Algunos IDEs, por ejemplo, IntelliJ también usan esto.

Los archivos en el disco no tienen esta notación, que es solo una compactación en la GUI IDE.

openCage
fuente
1
Fue una captura de pantalla de Intellij.
Michael K
Solo para aclaración personal: ¿IntelliJ produce archivos fuente Java con esta notación, iaw, archivos fuente con contenido ilegal de Java? ¿O es solo la vista de la fuente y el archivo guardado es correcto?
Andreas Dolk
55
@Andreas_D: es solo una vista. Los archivos en el disco están bien.
openCage
66
Y en realidad, la tilde está en gris (para indicar que es diferente), y si hace clic en ella, se expandirá a la definición completa.
yshavit
1
Esto se puede deshabilitar en la configuración de intelij para editor / general / Code Folding.
Ocie Mitchell
16

Si no hubiera una tilde, diría que el código ya era Java 7. Java 7 permite al operador de diamantes, por lo que este es / será un código Java legal:

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

(pero - no tilde con esta sintaxis)

Andreas Dolk
fuente
9

En IntelliJ IDEA, el ~aquí:

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

significa String, que es lo mismo que en la declaración en el lado izquierdo.

Zinan Xing
fuente
2

Creo que es una forma abreviada de significar cualquiera que sea el tipo, en este caso OrderItem .

Andrew White
fuente