У меня есть класс GameWorld
, где I update
и render
большая часть моей игры. В этом классе мне нужен метод, который удаляет объекты, выходящие за пределы экрана. Кроме того, поскольку большинство моих игровых объектов хранятся в ArrayLists
, мне нужно создать общий метод, который может выполнять это задание для нескольких типов объектов. Это говорит о том, что я знаю, что для того, чтобы это работало с генериками, эти «объекты» должны быть связаны друг с другом: либо путем наследования, либо с помощью интерфейсов. Это говорит о том, что я пробовал:Ограниченный тип Параметр, не разрешающий доступ к методам соответствующих объектов
У меня есть интерфейс под названием WorldEntities
, который в целом отражает то, что должно делать каждая сущность в игре. Вот оно:
public interface WorldEntities {
void update(float delta, GameWorld game);
void render(SpriteBatch batch);
Vector2 getPosition();
Rectangle getBounds();
}
Используя этот интерфейс, я пытался создать универсальный метод, который может удалить любой объект, который выходит за пределы экрана границ. Вот моя попытка:
public <T extends WorldEntities> void deleteOffScreenObjects(ArrayList<T> objectList){
Iterator itr = objectList.iterator();
while (itr.hasNext()){
if(itr.next().getPosition().y < -AssetLoader.cloud.getHeight()){
itr.remove();
}
}
}
Этот метод, однако, имеет проблемы в itr.next().getPosition().y
о том, что Cannot resolve method getPosition()
.
Сначала я думал, что первое, что приходит после extends
, должно быть нормальным классом. Из того, что я прочитал, это правда, но только если у вас есть ограниченные параметры с интерфейсами и классами, поэтому это не может быть проблемой. (Из документации: "If one of the bounds is a class, it must be specified first.")
ПРИМЕЧАНИЕ: -AssetLoader.cloud.getHeight()
является постоянным. Я изменю его после того, как эта проблема будет решена.
Так что мой вопрос: почему я не могу получить доступ к getPosition()
, хотя любой параметр, который передается в deleteOffScreenObjects
, реализует интерфейс, который гарантирует, что этот метод доступен и реализован?
Спасибо! Не могу поверить, что я не поймал этого, прочитав так много статей! –