0
4

3 回答 3

6

它改变了类型参数,因为这个方法可以操作任何CyclicQueue,而不仅仅是一个CyclicQueue<T>.

也可以写成

public void emptyList(CyclicQueue<?> queue) {
    while(!queue.isEmpty()) { queue.pop(); }
}  
于 2013-06-12T02:21:26.300 回答
3

它是一种不一定与T. 如果你有:

class CyclicQueue<T> {
    public T foo(CyclicQueue<T> x) {...}
    public <S> S bar(CyclicQueue<S> y) {...}
}

foo只能采用其自身类型的循环队列 ( T),但bar可以采用CyclicQueue任何类型的 a。

于 2013-06-12T02:21:50.820 回答
0

emptyList 有自己的参数类型,它实际上可以使用相同的参数类型名称T

public <T> void emptyList(CyclicQueue<T> queue) {
    while(!queue.isEmpty()) { queue.pop(); }
}

但编译器会发出警告The type parameter T hides parameter T,因为在此方法中无法使用类参数类型,例如

public <T> void emptyList(CyclicQueue<T> queue) {
    T e = data[0];  <-- ambiguous
    ...
于 2013-06-12T04:29:46.870 回答