尝试访问另一个类中的方法

时间:2019-06-10 17:31:41

标签: java

因此,要编写一段代码,循环遍历包含类的不同实例的链表,挑选具有特定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
        }
    }   
}

2 个答案:

答案 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
}