我一直在尋找一個差異,看到這樣的代碼:Java泛型擴展
public interface Vector<T extends Vector>
這是由以下代碼取代:
public interface Vector<T extends Vector<T>>
我有麻煩纏繞我的周圍的頭,什麼是區別?他們如何工作不同?
我一直在尋找一個差異,看到這樣的代碼:Java泛型擴展
public interface Vector<T extends Vector>
這是由以下代碼取代:
public interface Vector<T extends Vector<T>>
我有麻煩纏繞我的周圍的頭,什麼是區別?他們如何工作不同?
這兩個聲明之間的區別在於第一個聲明會產生編譯器警告,第二個聲明不會。這是因爲泛型類型應該總是和參數一起使用。
該聲明確保如果X實現矢量它必須是X的向量:
class X implements Vector<X> {
...
任何東西都不會產生一個編譯錯誤。
其實這種結構用於在JDK:
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable {
...
這意味着,當我們聲明枚舉X它(隱含的)延伸Enum<X>
我覺得這個頁面應該回答您的所有問題:HTTP:/ /stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-it – robbmj
其實它回答我的問題,我有時有麻煩解析Java泛型參數化的語言在狂野。知道這是一個原始類型幫助我從ArrayList vs ArrayList等角度考慮它。 –
talloaktrees
非常有趣的遞歸泛型。 –