Co oznacza tylda w nawiasach ostrych podczas tworzenia klasy ogólnej Java?

127

Czytałem kilka przykładów JMockit i znalazłem ten kod:

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

Co oznacza tylda w identyfikatorze rodzajowym? Wiem, że to jednoargumentowy operator bitowy NOT, ale nie widzę tutaj operandu.

Próbowałem też go skompilować i wyskoczył błąd. Czy po prostu czegoś brakuje?

Michael K.
źródło

Odpowiedzi:

158

To jest po prostu skrót określenia „to samo co w deklaracji”.

Niektóre IDE, np. IntelliJ, również tego używają.

Pliki na dysku nie mają tej notacji, co jest jedynie kompresją w GUI IDE.

openCage
źródło
1
To był zrzut ekranu Intellij.
Michael K
Tylko dla osobistych wyjaśnień - IntelliJ tworzy pliki źródłowe Java z notacją, iaw, pliki źródłowe z nielegalną zawartością Java ??? Czy to tylko widok źródła i zapisanego pliku jest poprawny?
Andreas Dolk
5
@Andreas_D: To tylko widok. Pliki na dysku są w porządku.
openCage
6
W rzeczywistości tylda jest wyszarzona (aby wskazać, że jest inna), a jeśli ją klikniesz, rozwinie się do pełnej definicji.
yshavit
1
Można to wyłączyć w ustawieniach intelij dla edytora / ogólnego / zwijania kodu.
Ocie Mitchell,
16

Gdyby nie było tyldy, powiedziałbym, że kod byłby już Java 7. Java 7 pozwala operatorowi diamentu, więc jest / będzie legalny kod Javy:

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

(ale - bez tyldy z tą składnią)

Andreas Dolk
źródło
9

W IntelliJ IDEA ~tutaj:

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

oznacza Stringto samo, co w deklaracji po lewej stronie.

Zinan Xing
źródło
2

Myślę, że jest to skrótowe oznaczenie dowolnego typu, w tym przypadku OrderItem .

Andrew White
źródło