This is the class I'm working with in a past exam:

```
   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;
     }
   }

```

As you can see the generic parameter used is `<T>`

However, in a subsequent question:

Q) In the box below, implement a generic method called emptyList which accepts a
generic CyclicQueue, and remove all items until it is empty.

The answer is this:

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

```

I got the same answer but using `<T>` instead of `<S>`. I googled this and found `<S>` stands for a secondary type to the first, `<T>`. From what I can see the type hasn't changed, so why has the generic parameter?