有没有办法在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();
...
答案 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!