Что означает тильда в угловых скобках при создании универсального класса Java?

127

Я читал несколько примеров JMockit и нашел этот код:

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

Что означает тильда в универсальном идентификаторе? Я знаю, что это унарный побитовый оператор НЕ, но я не вижу здесь операнда.

Также я попытался скомпилировать его и получил ошибку. Я что-то упускаю?

Майкл К
источник

Ответы:

158

Это просто сокращение от «то же, что и в объявлении».

Некоторые IDE, например IntelliJ, тоже используют это.

Файлы на диске не имеют этой нотации, это просто сжатие в графическом интерфейсе IDE.

openCage
источник
1
Это был скриншот Intellij.
Michael K
Просто для личного пояснения - IntelliJ создает исходные файлы Java с этой нотацией, iaw, исходные файлы с незаконным содержимым Java ??? Или это просто вид на источник и сохраненный файл правильный?
Андреас Долк
5
@Andreas_D: Это просто взгляд. Файлы на диске в порядке.
openCage 03
6
На самом деле тильда неактивна (чтобы указать, что она другая), и если вы нажмете на нее, она расширится до полного определения.
yshavit
1
Это можно отключить в настройках intelij для редактора / общего / сворачивания кода.
Ocie Mitchell 05
16

Если бы не было тильды, я бы сказал, что это уже был код Java 7. Java 7 допускает оператор «ромб», так что это / будет законный код Java:

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

(но - тильды в этом синтаксисе нет)

Андреас Долк
источник
9

В IntelliJ IDEA ~здесь:

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

означает String, что то же самое, что и в объявлении слева.

Зинан Син
источник
2

Я думаю, что это сокращение для обозначения любого типа, в данном случае OrderItem .

Эндрю Уайт
источник