Como posso chamar um método de instância de um objeto genérico?

swyveu:

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();
    });
}
rgettman:

O seu Tparâ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 Objectmétodos). É por isso que não pode encontrar o drawmétodo.

Fazer suas classes que têm a drawherdar método de alguns superclasse ou interface que declara o drawmétodo? Se não, criar essa interface, por exemplo Drawable.

Em seguida, alterar o parâmetro datapara 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 Listserá Drawable, para que o compilador sabe que todos os objetos nessa lista terá um drawmétodo.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=173081&siteId=1
Recomendado
Clasificación