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

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

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

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

Кроме того, я попытался скомпилировать его и получил сообщение об ошибке. Я что-то пропустил?

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

В IntelliJ IDEA ~ здесь:

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

означает String, что совпадает с декларацией с левой стороны.

Ответ 4

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