[英]Type Bounds with Comparable Interface in Java
在 JDK 11 中,我創建了一個名為“Collection”的泛型類,以便為類型參數提供的任何類型都必須實現 Comparable 接口。 類聲明目前如下:
public class Collection <T extends Comparable<T>>
本來我認為類聲明應該是這樣的:
public class Collection <T implements Comparable<T>>
但 JDK 不喜歡那樣。
所以我的問題是為什么類聲明是前者而不是后者。 我們不擴展類並實現接口嗎?
關於邊界聲明的語法,在 Java 5 中添加泛型的語言架構師面臨以下選擇:
extends
和implements
邊界),或T extends Foo
、 T <: Foo
等) 后者(明智地,IMO)被視為更務實的選擇,因為在聲明類型變量時,超類型是類還是接口並不重要,並且具有要求客戶使用的繁瑣語法完全正確的關鍵字(並且會使復合邊界像<T extends ArrayList implements Serializable
> 更加丑陋)可能會被視為只是使事情變得更難使用,而對代碼的編寫者或讀者都沒有實際好處。
這種決定通常是隨着語言的發展而發生的,在這種情況下,嚴格遵守先例只會使事情變得更加困難,沒有任何好處,因此語言設計者有時(在仔細考慮了兩種選擇的利弊后)選擇打破先例為了更好的結果。
集合已經在java.util
。 用這個名字創建另一個類會讓每個人都感到困惑; 我建議你選擇別的東西。
泛型通常是關於類型的。 使用了extends
一詞,這有點反映了該關鍵字的相同用法,例如class Foo extends Bar
,但它的含義並不完全相同。 關鍵是,規范說它是extends
而不是implements
不管后面是什么,並且在這個問題上比“規范說的”更進一步沒有多大意義。
因此,鑒於E
可能是一個類或一個接口,您是想要implements E
還是extends E
? 除非您想要第三個關鍵字(可能與上下文相關),否則區分是沒有意義的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.