2017-07-19 68 views
0

回答這個問題Creating generic array in Java via unchecked type-cast時,newacct說在java泛型編程中,Object類的參數類型的上界或下界沒有通配符?

(下界酒吧是在這個問題上的對象。在下界酒吧的情況是另一回事,更換對象中所有出現的這個討論,無論是界是)

這裏是newacct代碼:

class Foo<Bar> { 
    Bar[] bars = (Bar[])new Object[5]; 
    public Bar get(int i) { 
     return bars[i]; 
    } 
    public void set(int i, Bar x) { 
     bars[i] = x; 
    } 
    public Bar[] getArray() { 
     return bars; 
    } 
} 

不知Object是否在上限或下限的Bar。我認爲Foo<Bar>Foo<Bar extends Object>的簡寫,所以對象應該是Bar的上界,我錯了嗎?

回答

-1

您也可以在泛型中如下定義下界。

class Foo<T extends Bar> { 
T[] bars = (T[])new Object[5]; 
public T get(int i) { 
    return bars[i]; 
} 
public void set(int i, Bar x) { 
    bars[i] = x; 
} 
public T[] getArray() { 
    return bars; 
} 

}

所以,你可以創建擴展酒吧任何類Foo對象。

不,你不能使用對象類型的實例和下界酒吧和上限是擴展酒吧類任何類。

0

給定類型變量聲明<T extends TypeName>,TypeNameT的上限。從技術上講,我認爲這只是約束,因爲上/下區別是only made for wildcards。此外,if no bound is specified, then Object is assumed,所以你是對的ObjectBar在這個例子中的界限。

我認爲newacct只是當他們寫出答案,並打算說'上限'而不是'下限'。

編輯:另外,談到在引用的Q & A中的特定構建體時,它指出是有用的the erasure of a type variable is the erasure of its left-most bound其替換用於數組創建與在使用的類型的元素類型的重要性界。例如,給定複雜類型變量聲明<T extends Comparable<T> & Serializable>T的刪除將是Comparable,因此您將使用Comparable[]Comparable<?>[]