2013-11-08 5 views
0

У меня есть класс Cell и класс Neighbour, распространяющийся Cell. Но я получаю сообщение об ошибке, когда пытаюсь передать ArrayList<Neighbour> функции, ожидающей ArrayList<Cell>. Что я пропустил?Полиморфизм и ArrayLists в Java

class Cell { 
    PVector pos; 

    Cell(PVector pPos) { 
     pos = pPos.get(); 
    } 
} 

class Neighbour extends Cell { 
    int borders = 0; 

    Neighbour(PVector pPos) { 
     super(pPos); 
    } 
} 

private int inSet(PVector pPos, ArrayList<Cell> set) { 
    [...] 

    return -1; 
} 

[...] 

ArrayList<Neighbour> neighbours = new ArrayList<Neighbour>(); 
PVector pPos = new PVector(0, 0); 

[...] 

inSet(pPos, neighbours); 

В последней строке бросает ошибку `Метод iniSet (PVector, ArrayList) не применим для аргументов (PVector, ArrayList);

Благодарим за помощь!

+2

Это может помочь понять: http://stackoverflow.com/questions/17131664/inheritance-in-java-with-generics/17131699#17131699 – user2336315

ответ

3

, который из-за

List<A> != List<B> ... even if B extends A. 

Что вам нужно сделать, это изменить функцию к следующему

private int inSet(PVector pPos, ArrayList<? extends Cell> set) { 
    [...] 
    return -1; 
} 

Надежда, что помогает.

2

Попробуйте с:

private int inSet(PVector pPos, List<? extends Cell> set) 
Смежные вопросы