Проблемы с пониманием универсальных типов Java, попытка построить очередь массива, но получение множества несовместимых ошибок типов - PullRequest
0 голосов
/ 20 марта 2019

Вот мой код:

public class ArrayQueue<E> implements QueueInterface<E> {

   private int front = -1;
   private int rear = -1;
   private E[] array; 
   private int manyItems;

   // constructor
   public ArrayQueue() {
      array = (E[]) new Object[5];
   } // end constructor method

   public void enqueue(E e) {
      if (rear == -1) {
         front = rear = e; // **this line gives an incompatible type error**
      } // end if

      if (rear + 1 > (array.length - 1) ) {
         E[] temp;
         temp = (E[]) new Object[array.length * 2];
         for (int i = 0; i < array.length; i++) {
            temp[i] = array[i];
         } // end for loop
         array = temp;
         array[rear + 1] = e;
         rear = rear + 1;
      } // end if

      else {
         array[rear + 1] = e;
         rear = rear + 1;
      } // end else

   } // end enqueue method

   public E dequeue() {
      if (front == -1) {
         throw new IllegalStateException("The queue is empty, cannot dequeue");
      } // end if

      E e = front; // **this line gives an incompatible type error**
      front = front + 1;

      return e;

   } // end dequeue method

   public E front() {
      if (front == -1) {
         throw new IllegalStateException("The queue is empty, cannot return front");
      } // end if

      E e = front; // **this line gives an incompatible type error**

      return e;

   } // end front method

} // end ArrayQueue class

Я запутался в том, что я должен делать, так как эти методы основаны на интерфейсе, который я не могу изменить, поэтому не могу изменить методы для возврата int,Кроме того, я думал, что универсальные типы могут содержать данные любого типа, как примитивные, так и Objects.

Я не совсем понимаю, что это значит:

E e = front;

Это одна из строк кода Iбыло дано работать с.Значит, большое E передает, что маленькое e будет переменной общего типа?Я просто использовал эту точную строку с очередью связанного списка, и она работала нормально, так как e был узлом объекта, а не целым числом.Но почему он не может взять int?И поскольку он не может, как я должен возвращать int в метод, который требует универсальный тип возвращаемого значения?

...