2013-12-12 21 views
5

Mam zadanie, które wymaga ode mnie wdrożenia ogólnej kolejki priorytetowej od zera, jednak dostaję błąd, który nie wydaje mi się sensowny.Jak dodać ogólne elementy do ogólnej tablicy ArrayList?

public class PriorityQueue<E> { 
    private ArrayList<E> items = new ArrayList<E>(0); 
    ... 
    public <E extends Comparable<E>> void insert(E newItem){ 

     if(numOfItems == 0){ 
      items.add(newItem); //ERROR: The method add(E) in the type ArrayList<E> 
             is not applicable for the arguments (E) 
      rear++; 
      numOfItems++; 
     }else{ 
      //INCOMPLETE 
     } 
    } 
} 

Odpowiedz

3

Nie trzeba się

<E extends Comparable<E>> 

int jego instancja. Już zadeklarowałeś to na poziomie klasy, więc nie potrzebujesz parametru typu w deklaracji metody.

Wystarczy zadeklarować

public void insert(E newItem){ 

to będzie skompilować.

4
public <T extends Comparable<E>> void insert(E newItem){ 

zmienić pierwszy 'E' na 'T', ponieważ parametr typu ukrywa oryginalny 'E'

+0

Po co dodawać parametr, którego nigdy nie używasz? – ILMTitan

3

W PriorityQueue wszystkie elementy muszą być porównywalne. Dlatego należy umieścić porównywalną powściągliwość na samej

public class PriorityQueue<E extends Comparable<? super E>> { 
    ... 

Gdy już to zrobisz, musisz usunąć parametr typu od wybranej metody, jak to tylko ukrywa poprawnie ograniczony typ zajęć paramemter klasie.

public void insert(E newItem) { 
    ... 

P.S. Chcesz Comparable<? super E>, ponieważ chcesz najbardziej ogólne ograniczenie, które pozwoli na porównanie wszystkich elementów (E) ze sobą.