Que signifie un tilde entre crochets lors de la création d'une classe générique Java?

127

Je lisais quelques exemples JMockit et j'ai trouvé ce code:

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

Que signifie le tilde dans l'identifiant générique? Je sais que c'est l'opérateur NOT unaire au niveau du bit, mais je ne vois pas d'opérande ici.

De plus, j'ai essayé de le compiler et j'ai eu une erreur. Suis-je juste en train de manquer quelque chose?

Michael K
la source

Réponses:

158

C'est juste un raccourci pour «même que dans la déclaration».

Certains IDE, par exemple IntelliJ, l'utilisent également.

Les fichiers sur disque n'ont pas cette notation, qui n'est qu'un compactage dans l'interface graphique IDE.

openCage
la source
1
C'était une capture d'écran Intellij.
Michael K
Juste pour clarification personnelle - IntelliJ produit des fichiers source Java avec cette notation, iaw, des fichiers source avec un contenu Java illégal ??? Ou est-ce simplement la vue de la source et le fichier enregistré est correct?
Andreas Dolk
5
@Andreas_D: Ce n'est qu'une vue. Les fichiers sur le disque sont ok.
openCage
6
Et en fait, le tilde est grisé (pour indiquer qu'il est différent), et si vous cliquez dessus, il s'étendra à la définition complète.
yshavit
1
Cela peut être désactivé dans les paramètres intelij pour l'éditeur / général / Pliage de code.
Ocie Mitchell
16

S'il n'y avait pas de tilde, je dirais, le code était déjà Java 7. Java 7 autorise l'opérateur diamant donc c'est / sera du code Java légal:

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

(mais - pas de tilde avec cette syntaxe)

Andreas Dolk
la source
9

Dans IntelliJ IDEA, le ~ici:

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

signifie String, qui est le même que dans la déclaration sur le côté gauche.

Zinan Xing
la source
2

Je pense que c'est un raccourci pour signifier quel que soit le type, dans ce cas OrderItem .

Andrew White
la source