首頁  >  文章  >  Java  >  為什麼不能使用「super」關鍵字來綁定 Java 泛型中的型別參數?

為什麼不能使用「super」關鍵字來綁定 Java 泛型中的型別參數?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-01 09:21:02844瀏覽

Why can't the 'super' keyword be used to bound type parameters in Java generics?

用「super」關鍵字綁定泛型:詳細說明

問題:為什麼不能使用「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”,從而導致潛在的運行時錯誤。

其他注意事項:

  • 泛型和數組:泛型和數組有固有的局限性,它們不能無縫混合。
  • 使用「super」的替代方案:為了在這種情況下實現類型安全,建議使用通配符或方法重載,而不是使用 'super' 來限制類型參數。

相關資源:

  • Java 教學/泛型

    • 子類型
    • 子類型
    • 子類型
    • 子類型
    子類型
  • 子類型
  • 子類型
  • 子類型
  • 子類型
  • 通配符的更多樂趣
Java 泛型:什麼是PECS? (生產者擴充消費者super)Java泛型中super和extends有什麼差別

以上是為什麼不能使用「super」關鍵字來綁定 Java 泛型中的型別參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn