Java Generik: memanjangkan T> lwn.
Generik Java membolehkan anda mencipta koleksi dan kaedah selamat jenis yang boleh beroperasi pada julat jenis data. Apabila menggunakan generik, fahami perbezaan antara memanjangkan T> dan
Pertimbangkan contoh berikut:
Map<String, Class<? extends Serializable>> expected = null; Map<String, Class<Date>> result = null; assertThat(result, is(expected));
Contoh ini menghasilkan ralat kompilasi dengan mesej berikut:
Error: cannot find symbol method assertThat(java.util.Map<java.lang.String,java.lang.Class<java.util.Date>>, org.hamcrest.Matcher<java.util.Map<java.lang.String,java.lang.Class<? extends java.io.Serializable>>>)
Mengapa versi ini gagal menyusun?
Puncanya terletak pada penggunaan
Apakah keburukan menukar assertThat to Matcher memanjangkan T>?
Menukar asertThat kepada Match memanjangkan T> membolehkan kita lulus dalam Matcher yang sepadan dengan superjenis T. Walaupun ini mungkin kelihatan seperti perubahan yang mudah, ia boleh membawa kepada tingkah laku yang tidak dijangka. Sebagai contoh, jika kita mempunyai Matcher yang sepadan dengan Senarai Rentetan, kita boleh menyerahkannya kepada kaedah yang mengharapkan Matcher untuk Senarai Objek. Dalam kes ini, Matcher tidak akan dapat memadankan parameter sebenar dengan betul, yang berpotensi membawa kepada keputusan yang salah.
Adakah gunanya untuk menjana kaedah assertThat dalam JUnit?
Penjanaan assertThat dalam JUnit bertujuan untuk memastikan keselamatan jenis dan mengelakkan ketidakpadanan antara jenis yang dijangka dan sebenar. Walau bagaimanapun, seperti yang dibincangkan di atas, ia juga boleh membawa kepada potensi isu jika tidak digunakan dengan berhati-hati.
Cadangan
Apabila membuat keputusan antara memanjangkan T> dan
Dengan mengikut pengesyoran ini, anda boleh mengelakkan ralat penyusunan dan memastikan keselamatan jenis apabila menggunakan generik Java.
Atas ialah kandungan terperinci Mengapa kaedah `assertThat` gagal disusun apabila menggunakan `Map. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!