2013-07-10 57 views
1

我創建了一個名爲Box的類,它有一個類型參數。據聲明如下:確保類型參數正確

public class Box<T> {...}

我還創建了包含這些盒子,它有這個表(被選擇等),用於許多不同的操作干將的表。聲明如下所示:

public class BoxContainer<T> {...}。如果我編寫new BoxContainer<Animal>(),則獲取所選方法將返回Animal。這很明顯。但是,是否可以確保BoxContainer只接受類型爲Box<T>的參數?我試圖寫public class BoxContainer<Box<T>> {...},但由於某種原因,這是不允許的。這可能嗎?還是更好的方法?

+0

我真的不明白了'Box'和'BoxContainer'之間的關係,可能你提供了一個完整的代碼片段? – sp00m

+0

BoxContainer的類型'T'是否與'Box'的類型'T'相同? –

回答

1

使用第二類型的PARAM

public class BoxContainer<T, Y extends Box<T>> {...} 

或者只是使用盒內的容器:

public class BoxContainer<T> { 
     List<Box<T>> innerList; 
} 
0

是一個通用的類型。它只是指定可以使用任何類型的對象,但不能使用基元。這就是爲什麼當你使用動物時它返回Animal

+0

對不起,我在寫這個時覺得我對這個問題感到困惑。我很抱歉。 – booleanCube

1

BoxContainer<T>是正確的泛型類型。如果你想只接受Box<T>對象爲您BoxContainer類,你可以簡單地限制方法/構造函數的簽名:

public class BoxContainer<T> { 
    private final Box<T> box; 

    public BoxContainer(Box<T> box) { 
    this.box = box; 
    } 

    public Box<T> getBox() { 
    return box; 
    } 

    public T getObjectFromBox() { 
    return box.getObject(); // assumes getObject returns object of type T 
    } 
}