Pencemaran timbunan ialah situasi yang berlaku pada masa jalan Java apabila pembolehubah jenis berparameter merujuk objek yang bukan daripada jenis berparameter itu. Istilah ini sering ditemui apabila bekerja dengan generik. Artikel ini bertujuan untuk mendedahkan konsep pencemaran timbunan di Jawa dan memberikan panduan untuk menyelesaikan dan mencegah pencemaran timbunan.
Sebelum kita mendalami pencemaran timbunan, mari kita semak semula Generik Java dengan cepat telah diperkenalkan di Java 5 untuk menyediakan keselamatan jenis dan untuk memastikan kelas, antara muka dan kaedah boleh digunakan dengan jenis data yang berbeza sambil mengekalkan penyusunan. penyemakan jenis masa
Generik membantu mengesan dan menghapuskan pengecualian penukaran kelas yang biasa dalam koleksi pra-Java 5, di mana anda perlu menaip membuang elemen yang diambil daripada koleksi.
Pencemaran timbunan bermakna pembolehubah jenis parameter merujuk kepada objek jenis parameter berbeza, menyebabkan Mesin Maya Java (JVM) membuang ClassCastException.
List<String><string> list = new ArrayList<String><string>(); List rawList = list; rawList.add(8); // heap pollution for (String str : list) { // ClassCastException at runtime System.out.println(str); } </string></string>
Dalam coretan kod di atas, ArrayList sepatutnya mengandungi jenis String, tetapi rujukan Senarai mentah menambah Integer padanya. Ini adalah operasi yang sah kerana jenis mentah dalam Java tidak disemak pada masa penyusunan , apabila gelung untuk dipertingkatkan cuba untuk menetapkan Integer ini kepada rujukan String dalam senarai, ClassCastException dilemparkan pada masa jalan Ini ialah contoh pencemaran timbunan
yang jelas.Walaupun pencemaran timbunan boleh membawa kepada ClassCastException pada masa jalanan, ia boleh dikurangkan menggunakan beberapa amalan
Elakkan mencampurkan jenis primitif dan jenis parameter − Ini adalah cara paling langsung untuk mengelakkan pencemaran timbunan. Elakkan menggunakan jenis primitif dalam kod anda dan pastikan semua koleksi diparameterkan dengan betul.
List<string> list = new ArrayList<string>(); list.add(8); // compiler error </string></string>
Gunakan Anotasi @SafeVarargs − Jika anda mempunyai kaedah generik yang tidak menguatkuasakan keselamatan jenisnya, anda boleh menyekat amaran pencemaran timbunan dengan anotasi @SafeVarargs. gunakan ini hanya apabila anda pasti bahawa kaedah itu tidak akan menyebabkan ClassCastException.
@SafeVarargs static void display(List<string>... lists) { for (List<string> list : lists) { System.out.println(list); } } </string></string>
Gunakan anotasi @SuppressWarnings("tidak ditanda") − Anotasi ini juga boleh menyekat amaran pencemaran timbunan. Ia adalah alat yang lebih luas daripada @SafeVarargs dan boleh digunakan untuk tugasan dan kaedah berubah-ubah.
@SuppressWarnings("unchecked") void someMethod() { List<string> list = new ArrayList<string>(); List rawList = list; rawList.add(8); // warning suppressed } </string></string>
Pencemaran timbunan ialah perangkap yang berpotensi di Jawa yang berlaku apabila mencampurkan jenis primitif dan berparameter, terutamanya dalam koleksi. Walaupun ia boleh menyebabkan pengecualian masa jalan, ia boleh dicegah dengan mudah dengan memahami dan mengikuti amalan terbaik untuk generik. Anotasi Java @SafeVarargs dan @SuppressWarnings("unchecked") boleh digunakan untuk menyekat amaran pencemaran timbunan dalam keadaan yang sesuai, tetapi kuncinya adalah untuk sentiasa memastikan bahawa kod anda jenis selamat.
Atas ialah kandungan terperinci Apakah pencemaran timbunan di Jawa dan bagaimana untuk menyelesaikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!