Java 泛型:與
Java 泛型可讓您建立可以對一系列資料型別進行操作的型別安全集和方法。使用泛型時,了解 之間的區別延伸T>
考慮以下範例:
Map<String, Class<? extends Serializable>> expected = null; Map<String, Class<Date>> result = null; assertThat(result, is(expected));
此範例產生編譯錯誤,並顯示以下訊息:
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>>>)
為什麼此版本編譯失敗?
原因在於使用了
將assertThat改為Matcher?
將assertThat改為Matcher讓我們可以傳入一個與 T 的超型別相符的 Matcher。雖然這看起來像是一個簡單的更改,但它可能會導致意外的行為。例如,如果我們有一個匹配字串列表的匹配器,我們可以將其傳遞給需要物件列表匹配器的方法。在這種情況下,Matcher 將無法正確匹配實際參數,可能會導致不正確的結果。
是否有必要在 JUnit 中泛化 assertThat 方法?
JUnit中assertThat的泛化旨在確保類型安全並防止預期類型與實際類型之間的不匹配。然而,如上所述,如果使用不小心,它也可能導致潛在的問題。
建議
在
使用
以上是為什麼使用'Map”時'assertThat”方法無法編譯的詳細內容。更多資訊請關注PHP中文網其他相關文章!