物件導向程式設計中,泛型在增強型別安全性和程式碼可重用性方面發揮著至關重要的作用。在Java泛型中,使用通配符,例如
考慮以下使用JUnit 和Hamcrest 匹配器的範例:
由於以下原因,此程式碼無法編譯assertThat 方法簽章中的泛型類型參數與實際類型不匹配參與。
了解為什麼使用 解決了這個問題,讓我們深入研究一下協方差的概念。在 Java 中,陣列是協變的,這表示如果類型 T 是 S 的子類型,則對應的陣列 T[] 和 S[] 也是子類型。
在給定的範例中,預期的對應可以包含代表 Serialized 子類別的 Class 物件的實例。另一方面,結果對應只能保存表示 Date 類別的 Class 物件。透過使用 ,assertThat 方法可以接受匹配器,檢查某個值是否是擴展 Serialized 的任何類別的實例,包括 Date 類別。
assertThat JUnit 中的方法是通用的,以確保為結果類型傳入適當的匹配器。透過一般將其鍵入為
切換斷言時Matcher 的參數列表延伸T>雖然解決了編譯問題,但它確實引入了一個潛在的缺點。這個擴展的參數清單允許任何對擴展 T 的類型進行操作的匹配器,這可能會在某些情況下導致不正確的匹配邏輯。
理解
之間的差異?延伸T>以上是`` 和 ` 有什麼區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!