問題:為什麼不能使用「super」關鍵字綁定型別類型參數,與通配符不同?
答案:
不允許使用「super」(例如「」)來限制型別參數Java,因為它實際上會對型別綁定的影響可以忽略不計,並且不會達到其預期目的。
考慮以下假設的程式碼:
interface Collection<T> { <S super T> S[] toArray(S[] a); }
此程式碼建議使用'toArray' 方法在“Collection”介面中應該有一個類型參數“S”,它是“T”的超類型。然而,這個界限是沒有意義的,因為每個類型都是“Object”的超類型,並且由於任何引用類型的數組都可以轉換為“Object[]”,編譯器將允許將任何數組作為參數傳遞給'toArray',無論它是否是預期的子類型。
因此,使用 'super' 綁定型別參數不會防止執行階段錯誤,例如 'ArrayStoreException'。因此,它在 Java 的類型系統中是不允許的。
範例:
考慮一個假設的泛型方法:
<T super Integer> void add(T number)
此方法旨在允許添加“整數”、“數字”和“物件”(因為它們都是“整數”的超類別),但不允許添加“字串”,因為它們不是。但是,由於“Object”是“Integer”的超類,因此仍然可以透過隱式轉換添加“string”,從而導致潛在的運行時錯誤。
其他注意事項:
相關資源:
Java 教學/泛型
以上是為什麼不能使用「super」關鍵字來綁定 Java 泛型中的型別參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!