因此,我想编写一段代码,循环遍历包含类的不同实例的链表,挑选具有特定 ID 的实例,运行该实例类中包含的方法并更改特定于该实例的变量。但是,我似乎无法访问给定对象中包含的方法。关于如何从其他类访问方法的任何想法?
public void tick() {
for(int i=0; i < handler.object.size() ;i++) {
GameObject tempObject = handler.object.get(i);
if (tempObject.getId() == ID.FlashCardCover){
//run a method in FlashCardCover class on this individual object
}
}
}
您的原始代码:
public void tick() {
for(int i=0; i < handler.object.size() ;i++) {
GameObject tempObject = handler.object.get(i);
if (tempObject.getId() == ID.FlashCardCover){
//run a method in FlashCardCover class on this individual object
}
}
}
如果我正确地解释了这一点,那么您有一些GameObject
s 并且其中一种 GameObject 是FlashCardCover
. 您可以通过检查“Id”(我将其称为“TypeId”或仅称为“Type”)来确定这一点
因此,当您遍历您的游戏对象时,您希望在该特定游戏对象实际上是 FlashCardCover 时调用某些方法。您可以通过调用该对象上的方法来做到这一点,比如说像tempObject.uncoverCard()
——但当然你不能这样做,因为游戏对象没有uncoverCard方法。
这是您使用演员表的地方
public void tick()
{
for (int i=0; i<handler.object.size(); i++)
{
GameObject tempObject = handler.object.get(i);
if (tempObject.getId() == ID.FlashCardCover) {
FlashCardCover c = (FlashCardCover) tempObject;
c.uncoverCard();
}
}
}
您已将 thetempObject
转换为 aFlashCardCover
并且这是一个您可以在其上调用“uncoverCard”方法的对象。
演员不必分两行完成(我这样做是为了清楚起见)——您可以同时进行演员和调用,例如((FlashCardCover) tempObject).uncoverCard()
请注意,这一切都假设 FlashCardCover 是 GameObject 的子类,例如
public class FlashCardCover extends GameObject { ... }
如果没有,你会得到一个 ClassCastException
现在解释完所有内容......您不需要自己的类型代码来进行这种类型的转换,您可以使用它instanceof
。
if (tempObject instanceof FlashCardCover) {
// do your thing
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句