O que significa um til entre colchetes angulares ao criar uma classe genérica Java?

127

Eu estava lendo alguns exemplos do JMockit e encontrei este código:

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

O que significa o til no identificador genérico? Eu sei que é o operador NOT bit a bit unário, mas não vejo um operando aqui.

Além disso, tentei compilá-lo e recebi um erro. Só estou perdendo alguma coisa?

Michael K
fonte

Respostas:

158

É apenas uma abreviação para "o mesmo que na declaração".

Alguns IDEs, por exemplo, o IntelliJ também usam isso.

Os arquivos no disco não possuem essa notação, que é apenas uma compactação na IDE GUI.

openCage
fonte
1
Era uma captura de tela do Intellij.
Michael K
Apenas para esclarecimento pessoal - o IntelliJ produz arquivos de origem Java com essa notação, iaw, arquivos de origem com conteúdo ilegal de Java ??? Ou isso é apenas a visão da fonte e o arquivo salvo está correto?
Andreas Dolk
5
@Andreas_D: É apenas uma visão. Os arquivos no disco estão ok.
openCage 3/02
6
Na verdade, o til fica acinzentado (para indicar que é diferente) e, se você clicar nele, ele será expandido para a definição completa.
yshavit
1
Isso pode ser desativado nas configurações intelij para editor / geral / dobragem de código.
Ocie Mitchell
16

Se não houvesse um til, eu diria que o código já era Java 7. O Java 7 permite ao operador diamante, então este é / será um código Java legal:

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

(mas - sem til com esta sintaxe)

Andreas Dolk
fonte
9

No IntelliJ IDEA, o ~aqui:

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

significa String, o mesmo que na declaração no lado esquerdo.

Zinan Xing
fonte
2

Eu acho que é uma abreviação para significar qualquer que seja o tipo, neste caso OrderItem .

Andrew White
fonte