Apa yang dimaksud dengan tilde dalam tanda kurung siku saat membuat kelas generik Java?

127

Saya membaca beberapa contoh JMockit dan menemukan kode ini:

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

Apa arti tilde dalam pengenal generik? Saya tahu ini adalah operator NOT bitwise unary, tapi saya tidak melihat operand di sini.

Juga, saya mencoba mengompilasinya dan mendapat kesalahan. Apakah saya baru saja melewatkan sesuatu?

Michael K
sumber

Jawaban:

158

Ini hanya singkatan untuk "sama seperti dalam deklarasi".

Beberapa IDE, misalnya IntelliJ, juga menggunakan ini.

File pada disk tidak memiliki notasi ini, yang hanya merupakan pemadatan di IDE GUI.

openCage
sumber
1
Itu adalah tangkapan layar Intellij.
Michael K
Hanya untuk klarifikasi pribadi - IntelliJ menghasilkan file sumber Java dengan notasi ini , iaw, file sumber dengan konten Java ilegal ??? Atau apakah ini hanya tampilan sumber dan file yang disimpan sudah benar?
Andreas Dolk
5
@Andreas_D: Ini hanya tampilan. File di disk baik-baik saja.
openCage
6
Dan sebenarnya, tilde berwarna abu-abu (untuk menunjukkan bahwa ini berbeda), dan jika Anda mengkliknya, itu akan meluas ke definisi lengkap.
yshavit
1
Ini dapat dinonaktifkan di pengaturan intelij untuk editor / umum / Code Folding.
Ocie Mitchell
16

Jika tidak ada tilde, menurut saya, kodenya sudah Java 7. Java 7 memungkinkan operator berlian jadi ini adalah / akan menjadi kode Java yang sah:

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

(tapi - tidak ada tilde dengan sintaks ini)

Andreas Dolk
sumber
9

Dalam IntelliJ IDEA, di ~sini:

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

artinya String, yang sama dengan deklarasi di sisi kiri.

Zinan Xing
sumber
2

Saya pikir itu adalah singkatan dari apa pun jenisnya, dalam hal ini OrderItem .

Andrew White
sumber