我可以用Java做到这一点吗?

时间:2012-01-02 16:35:17

标签: java class dynamic

有没有办法在Java中这样做?

class A { ... }
class B { ... }

void method()
{
 Class[] array = {A,B,A,A};
 int i = 2;
 Object object = new array[i]();
}

并且不,我不想使用下面的任何ifs或开关

if(i==0) object = new A();
else if(i==1) object = new B();
...

4 个答案:

答案 0 :(得分:7)

你必须做这样的事情:

class A { ... }
class B { ... }
void method(){
    Class[] array = {A.class, B.class, A.class, A.class};
    int i = 2;
    Object object = array[i].newInstance();
}

该类必须有一个默认构造函数(一个没有参数)才能使newInstance()起作用。

答案 1 :(得分:0)

您可以将相应类的实例直接放在数组中而不需要实例化,而不是类。

class A {
    A(){...} 
}
class B { 
    B(){...}
}

void method()
{
     Object[] array = {new A(), new B(), new A(), new A()};
     int i = 2;
     Object object = array[i];
}

答案 2 :(得分:0)

这是你想要的吗?

Class[] classes = {A.class, B.class, A.class, A.class};
int i = 2;
Object obj = classes[i].newInstance();

答案 3 :(得分:0)

您可以使用java反射来执行此操作。使用Java反射,您可以获得“类”标识,然后获取构造函数,然后获取新实例。你可以从中查看 Java Reflection Tutorial