因此,要编写一段代码,循环遍历包含类的不同实例的链表,挑选具有特定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
}
}
}
答案 0 :(得分:0)
回答上面的注释对于正确回答您的问题很重要,请按照代码段中的注释“ 在此单个对象上运行FlashCardCover类中的方法”看起来像 GameObject 扩展或实现 FlashCardCover ,如果该假设正确,则tempObject.invoke(...)以及所有必需的参数都可以在假定此方法可见的情况下达到目的。
答案 1 :(得分:0)
您的原始代码:
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
,而GameObject的一种是FlashCardCover
。您可以通过检查“ Id”(我称其为“ TypeId”或简称为“ Type”)来确定这一点
因此,当您遍历GameObjects时,您想在该特定GameObject实际上是FlashCardCover时调用某种方法。您可以通过在该对象上调用方法来做到这一点,例如说tempObject.uncoverCard()
,但是您当然不能这样做,因为GameObject没有 uncoverCard 方法。
在这里使用cast
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();
}
}
}
您已将tempObject
转换为FlashCardCover
,并且 是可以在其上调用“ uncoverCard”方法的对象。
强制转换不必两行进行(为清楚起见,我这样做了)–您可以同时进行强制转换和调用,例如((FlashCardCover) tempObject).uncoverCard()
请注意,这全部假设FlashCardCover是GameObject的子类,例如
public class FlashCardCover extends GameObject { ... }
如果没有,您会得到一个ClassCastException
现在,所有内容都已说明...您不需要自己的类型代码来进行这种类型的转换,可以改用instanceof
。
if (tempObject instanceof FlashCardCover) {
// do your thing
}