web-dev-qa-db-fra.com

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

Je lisais quelques exemples de 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?

115
Michael K

Il s'agit simplement d'un raccourci pour "comme dans la déclaration".

Certains IDE, par exemple IntelliJ l'utilise aussi.

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

145
openCage

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

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

(mais - pas de tilde avec cette syntaxe)

14
Andreas_D

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.

8
Zinan Xing

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

2
Andrew White