Rumah >Java >javaTutorial >Mengapa Menggunakan `` dalam Java Generics, Terutamanya dalam Kaedah `assertThat`?

Mengapa Menggunakan `` dalam Java Generics, Terutamanya dalam Kaedah `assertThat`?

Barbara Streisand
Barbara Streisandasal
2024-11-20 17:57:18853semak imbas

Why Use `` in Java Generics, Especially in `assertThat` Methods?

Java Generics: Bila dan Mengapa Menggunakan ?

Apabila menggunakan Java generics, mungkin terdapat keadaan di mana anda memerlukan . Artikel ini mengkaji sebab di sebalik perkara ini dan meneroka sebarang kemungkinan kelemahan yang berkaitan dengan penggunaan .

Ralat Penyusunan dalam Kaedah AssertThat

Pertimbangkan coretan kod berikut:

Map<String, Class<? extends Serializable>> expected = null;
Map<String, Class<java.util.Date>> result = null;
assertThat(result, is(expected));

Kod ini gagal disusun kerana jenis yang tidak sepadan. menentukan bahawa parameter sebenar boleh menjadi SomeClass atau mana-mana subjenisnya. Dalam kes ini, keputusan memegang Kelas objek, manakala dijangka boleh memegang objek Kelas mewakili mana-mana kelas yang melaksanakan Serializable. Oleh itu, T ditetapkan secara khusus kepada Map>, yang tidak sepadan dengan Map>>`.

Menukar kepada Matcher

Mengubah suai tandatangan kaedah assertThat kepada:

public static <T> void assertThat(T result, Matcher<? extends T> matcher)

menyelesaikan ralat kompilasi. Ini membolehkan kaedah menerima Matcher yang sesuai dengan jenis hasil, memastikan jenis keselamatan.

Sebarang Kelemahan Penggunaan Matcher?

Menggunakan Matcher tidak menawarkan kelemahan yang ketara. Ia memastikan bahawa Matcher yang serasi disediakan, menghalang kemungkinan pengecualian masa jalan yang disebabkan oleh jenis yang tidak sepadan.

Tujuan assertThat Generics

Generik dalam kaedah assertThat membenarkan pemeriksaan jenis untuk memastikan bahawa Matcher yang disediakan sepadan kepada jenis hasil. Walaupun kelas Matcher tidak memerlukan generik, menggunakannya membantu menguatkuasakan keselamatan jenis dan mencegah kemungkinan ralat.

Atas ialah kandungan terperinci Mengapa Menggunakan `` dalam Java Generics, Terutamanya dalam Kaedah `assertThat`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn