1. <T extends Comparable<? super T>>代表什么意思
extends后面跟的類型,如<任意字符 extends="">表示泛型的上限。示例代碼如下:
import java.util.*; class Demo<T extends List>{} public class Test { public static void main(String[] args) { Demo<ArrayList> p = null; // 編譯正確 //這里因為ArrayList是List的子類所以通過 //如果改為Demo<Collection> p = null;就會報錯這樣就限制了上限 } }
在理解了extends所表示的泛型的上限后,接下來介紹一下super的作用,它與extends相反,表示的是泛型的下限。
所以結(jié)合上述兩點,我們來分析一下這句話整體代表什么意思。首先,extends對泛型上限進行了限制即T必須是Comparable<? super T>的子類,然后<? super T>表示Comparable<>中的類型下限為T!
2. <T extends Comparable<T>>
和 <T extends Comparable<? super T>>
有什么不同
接下來我們通過對比,使得大家對為何要這樣編寫代碼有更加深刻的印象。
<T extends Comparable<T>>
它代表的意思是:類型T必須實現(xiàn)Comparable
接口,并且這個接口的類型是T。這樣,T的實例之間才能相互比較大小。這邊我們以Java中GregorianCalendar這個類為例。
import java.util.GregorianCalendar; class Demo<T extends Comparable<T>>{} //注意這里是沒有? super的 public class Test { public static void main(String[] args) { Demo<GregorianCalendar> p = null; } }
這里編譯報錯,因為這里的<T extends Comparable<T>>相當于<GregorianCalendar extends Comparable<GregorianCalendar>>,但是GregorianCalendar中并沒有實現(xiàn)Comparable<GregorianCalendar>,而是僅僅持有從Calendar繼承過來的Comparable<Calendar>,這樣就會因為不在限制范圍內(nèi)而報錯
<T extends Comparable<? super T>>
它代表的意思是:類型T必須實現(xiàn)Comparable
接口,并且這個接口的類型是T或者是T的任一父類。這樣聲明后,T的實例之間和T的父類的實例之間可以相互比較大小。同樣還是以GregorianCalendar為例。代碼如下所示:
import java.util.GregorianCalendar; class Demo<T extends Comparable<? super T>>{} public class Test1 { public static void main(String[] args) { Demo<GregorianCalendar> p = null; // 編譯正確 } }
此時編譯通過,這里可以理解為<GregorianCalendar extends Comparable<Calendar>>