The resmi tutorial Java pada obat generik menjelaskan penghapusan jenis dan mengapa hal itu ditambahkan ke compiler:
Ketika tipe generik dipakai, kompiler menerjemahkan tipe-tipe tersebut dengan teknik yang disebut tipe erasure - suatu proses di mana kompiler menghapus semua informasi yang terkait dengan parameter tipe dan argumen tipe dalam kelas atau metode. Penghapusan jenis memungkinkan aplikasi Java yang menggunakan obat generik untuk mempertahankan kompatibilitas biner dengan perpustakaan Java dan aplikasi yang dibuat sebelum obat generik.
Kemungkinan besar ini adalah pendekatan pragmatis, atau mungkin yang paling tidak menyakitkan. Namun, sekarang karena obat generik didukung secara luas di seluruh industri, apa yang dapat dilakukan agar kita tidak perlu menghapus jenis? Apakah layak tanpa perlu merusak kompatibilitas, atau jika layak, apakah praktis?
Apakah pernyataan terakhir dalam kutipan di atas menjadi referensi diri? Yaitu: "tipe erasure memungkinkan aplikasi Java yang menggunakan generik untuk mempertahankan kompatibilitas biner dengan perpustakaan Java dan aplikasi yang dibuat dengan versi Java yang melakukan penghapusan tipe."
Jawaban:
Akhir masa berlaku untuk Java Development Toolkit dan Java Runtime Environment. Dan hanya versi Oracle (Sun). Tetapi itu tidak berlaku untuk aplikasi yang ditulis oleh pihak ketiga. Tujuannya adalah untuk tidak pernah memecahkan kode yang pernah berjalan di JVM, sehingga kemungkinan besar Java tidak akan pernah berhenti melakukan penghapusan tipe.
Tentu saja C # juga memperkenalkan generik dalam versi yang lebih baru dengan cara yang kompatibel tanpa melakukan penghapusan tipe, tetapi pada dasarnya berarti menduplikasi semua kelas koleksi. Yang saya kira adalah apa yang tidak ingin dilakukan oleh perancang Java dan oleh karena itu mengapa mereka memilih jenis penghapusan di tempat pertama. Tanpa tipe nilai keuntungan dari generik yang tidak terhapus tipe tidak sebesar itu.
sumber
List<int>
mungkin akan membuat beban kerja yang jauh lebih efisien daripada saat iniList<Integer>
.