0

I am trying to implement simple queue in Java from an interface, but I'm getting an error:

Error:(9, 17) java: name clash: enqueue(T) in main.QueueImpl and enqueue(java.lang.Object) in main.Queue have the same erasure, yet neither overrides the other

Here is my code:

Interface:

public interface Queue<T> {

    void enqueue(T o);

    T dequeue();

    int size();
}

Implementation:

public class QueueImpl<T> implements Queue {
LinkedList<T> queue = new LinkedList<>();

@Override
public void enqueue(T o) {
    queue.add(o);
}

@Override
public T dequeue() {
    return queue.poll();
}

@Override
public int size() {
    return queue.size();
 }
}

What's the problem with implementing enqueue method?

Pritam Banerjee
  • 17,953
  • 10
  • 93
  • 108
steve1337
  • 377
  • 1
  • 8

1 Answers1

3

Change your implementation to pass the generic to the interface. Like,

public class QueueImpl<T> implements Queue<T> {

As is, it knows Queue is generic, but it's treated as a raw type.

Elliott Frisch
  • 198,278
  • 20
  • 158
  • 249