Java:创建由变量指定的对象

时间:2016-11-12 19:24:27

标签: java object

Heythere, 我很确定这是不可能的,但你可以做这样的事情:

var a=emeny.class
new a(); 

编辑:伪代码;我想将类存储在变量中并以某种方式创建变量的对象。

我想写一个类似的方法:?

public void spawn(class c){
      addObject(new c(),x,y); 
}

以便稍后使用不同的参数调用它,例如:

spawn(ant);
spawn(fly);
spawn(bee);

是否可以或者我必须使用if语句?

提前致谢, Jandermannderkann

3 个答案:

答案 0 :(得分:1)

在java中,您可以使用反射

来完成此操作
  

反射通常被需要能力的程序使用   检查或修改在其中运行的应用程序的运行时行为   Java虚拟机。

例如:

    try {
        addObject(c.newInstance(),x,y);
    } catch (InstantiationException | IllegalAccessException e) {
        e.printStackTrace();
    }

有关反思的更多信息,请阅读here 希望它有所帮助。

答案 1 :(得分:1)

  

我想写一个类似的方法吗?

您可以在Java中使用多态(不同的表单/类型)将不同的类型传递给spawn()方法,并实现类似于您的代码。您可以参考here更多多态性。

(1)定义基本类型(接口)

public interface Insect {
     public void add(int x, int y);
   }

(2)定义具体类型(实施类)

public class Ant implements Insect {
        public void add(int x, int y) {
         //code
        }
    }


public class Bee implements Insect {
    public void add(int x, int y) {
     //code
    }
}

public class Fly implements Insect {
    public void add(int x, int y) {
     //code
    }
}

(3)创建一个spawn()以采用Base Type:

public class Test {
       public void spawn(Insect insect){

          //calls add method of either Bee or Fly or Ant Type
          //Depends upon the insect object passed to this method
          insect.add(x,y); 
       }

       public static void main(String[] args) {
            Test test = new Test();

            Bee bee = new Bee();
            Fly fly = new Fly();

            //you can pass either bee or fly objects to your spawn
            test.spawn(bee);
            test.spawn(fly);
      }
   }

答案 2 :(得分:0)

Object instantiate(Class<?> a)
{
    try {
        return a.newInstance();
    } catch (Exception e) {

        //if your code ends up here it means there were a problem about instantiation

    } 

    return null;

}

但是,我建议您在此之前了解有关基础知识的更多信息。