我有一个GameWorld
类,其中我的大部分游戏是我的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
实现一个接口,确保此方法可用和实现?
谢谢!我无法相信在阅读了这么多文章之后我没有听到! – 2014-12-27 16:43:41