Apa itu Type Erasure ?

Type Erasure adalah salah satu proses yang terjadi di waktu proses compile di bahasa Java.

Type Erasure ini memastikan bahwa semua class hasil compile adalah class, interface, dan method yang biasa, sehingga tidak memerlukan tambahan class, method, dan interface ketika dieksekusi di lingkungan runtime Java (JRE) yang existing.

Tentunya proses ini dilakukan oleh compiler Java.

Apa yang dilakukan dalam proses ini ?

  • Compiler akan meremove tipe dari parameter, dengan persyaratan tertentu.
  • Compiler akan meremove tipe dari argument, dengan persyaratan tertentu.

Apaa!!.. diremove ? contohnya bagaimana ?

Misalnya code java :

1List<String> daftarNama = new ArrayList<String>();
2daftarNama.add("John");
3String nama1 = daftarNama.get(0);

waktu dicompile , maka akan menjadi :

1List daftarNama = new ArrayList();
2daftarNama.add("John");
3String nama1 = (String) daftarNama.get(0);

Kita lihat di baris pertama, tipe List<String> setelah dicompile, akan menjad List saja.

Kenapa mesti diremove ?

Pertanyaan ini mesti dijawab bermula dengan sejarah bagaimana Type Erasure ini muncul.

Type Erasure ini dimunculkan bersamaan dengan dimunculkannya fitur Generic di J2SE 1.5.

Dengan Generic, maka semenjak Java 1.5, compiler Java akan lebih ketat dalam melakukan pengecekan terhadap tipe data dan juga menambahkan fitur Generic Programming.

Fitur Generic ini sedikit banyak berusaha mengurangi Error yang mungkin terjadi di saat Runtime, dengan memaksa pengecekan tipe diwaktu compile.

Contohnya :

1List<Integer> daftarNama = new ArrayList<>();
2
3void method1(T input)  {
4  // code
5}
6
7// panggil fungsi
8
9this.method1(daftarNama);

Pada line 1 , ada deklarasi List<Integer> , dimana didefinisikan bahwa List nya terdiri dari object Integer.

Pada line 3 , ada deklarasi T input, dimana didefinisikan bahwa input nya bisa berupa apa saja dengan tipe T.

Pada line 9 , ada pemanggilan fungsi method1, dengan parameternya adalah daftarNama bertipe List<Integer>

Dengan tambahan tipe seperti di line 1, maka compiler akan memaksa code program kelanjutannya untuk melakukan aksi terhadap List yang itemnya kompatibel dengan tipe object Integer.

Akan tetapi Generic ini tidak ingin membuat permasalahan tambahan di saat runtime nantinya.

Dengan menambahkan jenis tipe yang baru di library JDK nya, misalnya List<String>, List<Integer>, T , E, T extends List, dsb, maka akan cukup menyulitkan pula ketika harus ditambahkan pula tipenya tersebut di runtime (JRE) nya.

Oleh karenanya, untuk mengurangi overhead tambahan ini, maka salah satu caranya adalah dengan Type Erasure ini.

Type Erasure akan menghilangkan tipe dari parameter dan argument, agar menjadi tipe yang sederhana yang dimengerti oleh JRE nantinya.

Jadi urutannya bagaimana ?

Ketika proses compile di Java terjadi, maka akan dilakukan :

  • Pengecekan tipe parameter dan argument
  • Setelah lolos pengecekan tipe, lalu dilakukan Type Erasure.

Kesimpulan

Type Erasure adalah salah satu cara dalam membuat sebuah program Java tetap kompatibel dengan lingkungan runtime yang tersedia, walaupun di waktu melakukan compile, dilakukan pengecekan yang cukup ketat terhadap tipe dari parameter dan argumen.

Type Erasure dimunculkan berbarengan dan sepaket dengan fitur Generic yang diperkenalkan di Java 1.5.

Ada cara lain lagi yang bisa dilakukan untuk membuat tetap kompatible dengan runtime yang ada yaitu dengan Reification.

Yuuk, nanti kita bahas…