Как я могу вызвать метод экземпляра из универсального объекта? - PullRequest
0 голосов
/ 25 января 2019

Скажем, у меня есть arrayList, содержащий элементы разных классов, каждый из которых имеет один и тот же метод: draw (); У меня есть третий класс с методом drawItems (), который принимает в качестве аргумента arrayList. Теперь, как я могу вызвать метод draw () для этих объектов, если они передаются как общие объекты?

Это ниже не работает. Я понимаю почему. Java не знает, что у элемента есть такая функция. Как я могу обойти это?

public void drawItems(ArrayList<T> data) 
{
    data.forEach((T item) -> {
        item.draw();
   }); 
}

UPDATE

Спасибо всем. Я сделал это следующим образом:

1) Создать интерфейс с именем Drawable:

public interface Drawable {
    public void draw();
}

2) Реализовать интерфейс в классе Item:

public class Item implements Drawable { 

    @Override
    public void draw(GraphicsContext gc) {
        //...
    }
}

3) Настройте элементы рисования:

public void drawItems(ArrayList<Drawable> data) {

    data.forEach((Drawable item) -> {
        item.draw();
    });
}

1 Ответ

0 голосов
/ 25 января 2019

Ваш параметр типа T не ограничен, поэтому компилятор не делает никаких предположений о методах, которые гарантированно будут доступны (за исключением методов Object). Вот почему он не может найти метод draw.

Ваши классы, у которых есть метод draw, наследуют какой-то суперкласс или интерфейс, который объявляет метод draw? Если нет, создайте этот интерфейс, например, Drawable.

Затем измените параметр data на тип List<? extends Drawable>, чтобы вы могли передать List<Drawable> или, например, List<DrawableSubclass>.

Если вместо этого вы должны использовать параметр типа T, объявите T (я предполагаю, что он в классе) как T extends Drawable.

В любом случае, с верхней границей все в List будет Drawable, поэтому компилятор знает, что любые объекты в этом списке будут иметь метод draw.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...