首頁  >  文章  >  Java  >  為什麼我們不能在 Java 泛型中使用「super」關鍵字來限制類型參數?

為什麼我們不能在 Java 泛型中使用「super」關鍵字來限制類型參數?

Linda Hamilton
Linda Hamilton原創
2024-10-31 16:22:30182瀏覽

Why Can't We Use 'super' Keyword for Type Parameter Bounds in Java Generics?

用「super」關鍵字限制泛型:全面解釋

Java 泛型允許型別安全和程式碼可重複使用性。泛型的一方面是類型限制,其中類型參數可以被限制為特定的子類型關係。但是,與通配符不同,類型參數不能使用“super”關鍵字進行限制。

在 Collection 介面中,toArray 方法採用「S[]」類型的參數,其中「S」是型別參數。問題是為什麼該方法沒有聲明為“”而不是通配符 ''。

答案在於「超級」邊界的行為。雖然 'super' 通常與通配符一起使用 (),但將其應用於類型參數 (' 而不是 '>)意想不到的後果。 Object 是所有引用類型的超類,這意味著 'Object[]' 是 '>' 的有效參數在編譯時。這違背了綁定的目的,因為任何引用類型參數都可以傳遞,即使那些不是「T」子類別的參數也是如此。

因此,型別參數上的「超級」邊界不會提供預期的保護無效的參數。為了說明,假設方法“>” S[] toArray(S[] a)' 和''因為“Integer”仍然允許“String[]”類型的參數,儘管“String”不是“Integer”的超類別。由於“String[]”是“Object[]”,它將滿足“super”界限。

此限制源自於泛型和陣列之間的交互作用。泛型和數組具有不同的協方差規則,從而導致觀察到的行為。

需要注意的是,此限制僅適用於型別參數。仍然可以使用“super”來綁定通配符來表達方差,如“'在 toArray 方法中,允許更大的靈活性。

更多關於泛型和類型限制的見解,請參閱以下資源:

  • Java 教學/泛型
  • Java 泛型:什麼是 PECS?
  • Java 泛型中 super 和 extends 有什麼差別

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

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