基于字符串值

时间:2016-12-02 10:38:56

标签: java

我一直在我的塔防游戏中进行反思,但我努力让这个游戏正常工作。

首先来看上下文:
我们正在加工,这是学校的要求。我们可能不会导入任何其他库。

我想要构建的对象首先从菜单中作为字符串接收。从那里我把它转换成一个类值,从那里我想把塔放在适当的位置。下面提供的方法代码以及作为我们传统方法的开关。

    void spawnSelected(String selectedTower) {
    selectedTower = ENGINE_PREFIX + selectedTower;
    try{
      Class c = Class.forName(selectedTower);
      println(c);
      try{
        Constructor C = c.getConstructor(PVector.class);
        println(C);
        //C.newInstance();
      /*}catch(InstantiationException s){
        println(s);
      }catch(IllegalAccessException r){
        println(r);
      */}catch(NoSuchMethodException p){
        println(p);
      }catch(ReflectiveOperationException i){
        println(i);
      }
    }catch(ClassNotFoundException e){
      println(e);
    }

    /*switch(selectedTower) {
    case "air_tower":
      new air_tower(mp.drawLocation);
      break;
    case "dark_tower":
      new dark_tower(mp.drawLocation);
      break;
    case "fire_tower":
      new fire_tower(mp.drawLocation);
      break;
    case "light_tower":
      new light_tower(mp.drawLocation);
      break;
    case "nature_tower":
      new nature_tower(mp.drawLocation);
      break;
    case "water_tower":
      new water_tower(mp.drawLocation);
      break;
    default: 
      selectedTower ="Air_tower";
      break;
    }*/
  }

我将展示空中塔的构造函数:

  class air_tower extends Basic_Tower {
  air_tower(PVector Loc){
   super( Loc ); 
   cost = 100;
   String[] effects = {
   };

   int[] effectEffectivenes = {
   };
   img =  loadImage("Air.png");
   type = "air";
   projectileSpeed = 360;
   projectileAcceleration = 5;
   range = 175;
   fireRate = 1400;
   damage = 27.5;
   numberOfTargets = 1;
   AoE = 0;
  }
}

我认为basic_tower构造函数也可能是相关的。所以这就是:

 Basic_Tower(PVector Loc) {

这个人扩展了对象,这是我们最基本的对象。那家伙有一个空的构造函数。

我的try-catch返回了这个错误:

  

java.lang.NoSuchMethodException:Basic_TowerDefense_Engine $ air_tower。(processing.core.PVector)

有人看到我做错了吗?

更新: 所以我试图使用函数getConstructors() 当我做的时候,返回是一个空数组。这是我现在开始研究的领导。

2 个答案:

答案 0 :(得分:0)

内部类的构造函数的第一个参数隐含地是它的封闭类:

Constructor con = 
    c.getConstructor(Basic_TowerDefense_Engine.class, PVector.class);
con.newInstance(this /* presumably? */, mp.drawLocation);

Asker说明:请阅读评论,以了解有关该问题的进一步背景以及该决议的解决方法。

答案 1 :(得分:0)

Welp我得到了它的工作。

事实证明,我没有在我的顾问中明确表示公开意味着.getConstructors根本找不到任何东西。

然而,当我公开时,它被认出来了。从那里结合我已经拥有的+ @Mureinik提供的答案我得到了最终答案。

为构造函数和obj的初始化生成以下代码。

Constructor C = c.getConstructor(Basic_TowerDefense_Engine.class, PVector.class);
C.newInstance(head, mp.drawLocation);

其中head是Basc_TowerDefense_Engine对象。