Dizer que tenho um matrizes contendo itens de classes diferentes, todas elas tendo o mesmo método: desenhar (); Eu tenho uma terceira classe, com um drawItems () método que leva em ArrayList como um parâmetro. Agora, como eu posso chamar o método draw () nesses objetos se eles são passados como objetos genéricos?
Este abaixo não funciona. Eu posso ver o porquê. Java não sabe o item tenha essa função. Como posso resolver isso?
public void drawItems(ArrayList<T> data)
{
data.forEach((T item) -> {
item.draw();
});
}
ATUALIZAR
Obrigado a todos. Eu fiz isso da seguinte forma:
1) Criar interface chamada Drawable:
public interface Drawable {
public void draw();
}
2) Implementar interface na classe Item:
public class Item implements Drawable {
@Override
public void draw(GraphicsContext gc) {
//...
}
}
3) Ajustar drawItems:
public void drawItems(ArrayList<Drawable> data) {
data.forEach((Drawable item) -> {
item.draw();
});
}
O seu T
parâmetro de tipo é ilimitado, para que o compilador não faz suposições sobre os métodos de garantia de estar disponível (exceto para Object
métodos). É por isso que não pode encontrar o draw
método.
Fazer suas classes que têm a draw
herdar método de alguns superclasse ou interface que declara o draw
método? Se não, criar essa interface, por exemplo Drawable
.
Em seguida, alterar o parâmetro data
para ser do tipo List<? extends Drawable>
, para que possa passar em um List<Drawable>
ou por exemplo, um List<DrawableSubclass>
.
Se em vez disso você deve usar o parâmetro de tipo T
, declarar T
(estou assumindo que é na classe) para ser T extends Drawable
.
De qualquer forma, com o limite superior, tudo no List
será Drawable
, para que o compilador sabe que todos os objetos nessa lista terá um draw
método.