在Java中调用方法并使用未知类的对象

时间:2013-06-02 15:21:17

标签: java class object package

回到游戏的主循环中我有一个问题,如果我可以从我不知道的类创建对象,这个任务就会被删除。

现在我有:

if (Monesers.Zombie.canBeCreated(world,objects)){
    Zombie.add(new Monster())
}

if (Monesers.Sceleton.canBeCreated(world,objects)){
    objects.add(new Monster())
}

我正在寻找可以循环到所有课程而不提及课程名称的内容,因此我不必为游戏中的每一件新事物反复复制相同的代码。

1 个答案:

答案 0 :(得分:1)

反思会让你到达某个地方......我不知道它是否是首选方法。

你可以这样做。让每个怪物类型实现一个接口,如下所示:

public interface Monster {

    public boolean canBeCreated ( );

}

然后你可以有一个怪物创造者,像这样:

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class MonsterCreator {

    private Monster[] monsterTypes;

    public MonsterCreator ( ) {
        monsterTypes = new Monster[2];
        monsterTypes[0] = new Zombie ( );
        monsterTypes[0] = new Skeleton ( );
    }

    public void tick ( ) {
        for ( Monster m : monsterTypes ) {
            if ( m.canBeCreated ( ) ) {
                try {
                    Constructor< ? >[] constr = m.getClass ( )
                        .getConstructors ( );
                    Monster toAdd = ( Monster ) constr[0].newInstance ( );
                    MonsterContainer.add ( toAdd );
                } catch ( InstantiationException | IllegalAccessException
                    | IllegalArgumentException | InvocationTargetException e ) {
                    e.printStackTrace ( );
                }
            }
        }
    }

}

值得一试...... :)

当然怪物类型的东西可以用类似于与类类型相关联的枚举常量的映射来完成......再次,这只是为了示例。只是想在问题结束之前发布这个帖子!