這是我在過去的考試工作類:爲什麼在一些方法泛型參數<T>變化<S>
class CyclicQueue<T> {
private T data[] = (T[]) new Object[100]; // max 100 items
private int items = 0, start = 0, next = 0;
public boolean isEmpty() { return items == 0; }
public void push(T item) {
if(items < data.length) {
data[next++] = item;
if(next == data.length) { next = 0; }
items++;
}
}
public T pop() {
T item = data[start++];
if(start == data.length) { start = 0; }
items--;
return item;
}
}
正如你可以看到使用泛型參數是<T>
但是,在後續問題中:
Q)在下面的框中,實現一個名爲emptyList的泛型方法,該方法接受一個 泛型CyclicQueue,並刪除所有項直到它爲空。
答案是這樣的:
public <S> void emptyList(CyclicQueue<S> queue) {
while(!queue.isEmpty()) { queue.pop(); }
}
我得到了同樣的答案,但使用<T>
代替<S>
。我搜索了這個,發現<S>
代表第一種,第二種類型<T>
。從我所看到的類型沒有改變,那麼爲什麼有泛型參數?
大概沒什麼特別的原因。 –
typename可以被稱爲任何東西。程序員可能起牀喝咖啡,然後回來,只能稱之爲S –
私人T data [] =(T [])new object [100]如何工作?除非'T'是'Object',否則你正在將一個Object []賦給一個子類數組。 –