Передача списка конкретных объектов при ожидании интерфейсов.Как? - PullRequest
1 голос
/ 21 февраля 2012

У меня есть SomeClass implements InterfaceA.
У меня есть метод:

public void doSomething(List<SomeClass) objects); 

Внутри этого метода я хочу вызвать:

public void doProcessing(List<InterfaceA) o); 

Как я могу это сделать?
Следующее не работает, хотя SomeClass isa InterfaceA:

public void doSomething(List<SomeClass> objects){  

   doProcessing(objects);  

}

Какой стандартный способ справиться с этим?

Ответы [ 3 ]

4 голосов
/ 21 февраля 2012

Объявите метод doProcessing() таким образом

public void doProcessing(List<? extends InterfaceA> o); 
4 голосов
/ 21 февраля 2012

Изменить подпись doSomething с

public void doSomething(List<SomeClass> objects);

до

public void doSomething(List<InterfaceA> objects);

или даже лучше

public void doSomething(List<? extends InterfaceA> objects); (в этом случае вы также должны изменить doProcessing).

Это означает, что оба ваших метода работают с интерфейсом, знают только интерфейс и не заботятся о конкретной реализации.

1 голос
/ 21 февраля 2012
public void doSomething(List<? extends InterfaceA> objects) 

должно работать.

Читать http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf, по крайней мере, дважды.

...