為什麼在類型參數邊界中允許「extends T」但不允許「implements T」?
在 Java 中,定義型別邊界時參數,可以使用「extends T」但不能使用「implements T」。這看起來像是任意的區別,但它有一個根植於 Java 泛型實作的特定原因。
這種差異的原因在於繼承和實現的語意。在Java中,一個類別只能實作一個接口,但它可以擴充多個類別。因此,在類型參數邊界中使用「extends」可以更靈活地指定允許的類型。
範例:
考慮以下程式碼:
如果我們允許在類型參數邊界中“實作”,則此程式碼將有效。然而,這會引發類別 B 應該實作哪個介面的問題。由於在此上下文中不支援多個接口,因此會導致歧義。
另一方面,在邊界中使用「extends」可確保類別 B 必須是介面 C 的子類型。這是一個更通用的約束,不會引入任何歧義。
因此,透過限制介面類型參數邊界中「extends」的使用,Java 確保了其泛型實現的一致性和清晰性。
以上是為什麼在類型參數邊界中允許“擴展 T”但不允許“實現 T”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!