2012-01-02 89 views
1

在Java中有這樣做的方法嗎?我可以在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(); 
... 

回答

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()工作。

+0

由於某種原因,newInstance()拋出一個InstantiationException – adrianton3 2012-01-02 17:07:56

+0

[Class.newInstance()](http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#newInstance() )) – 2012-01-02 17:41:16

0

取而代之的是類的,你可以把相應的類istances陣列直接而不需要重新實現它們。

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]; 
} 
0

這是你想要的嗎?

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

您可以使用java反射來做到這一點。使用Java反射,您可以獲得'Class'標識,然後獲取構造函數,然後使用它創建新實例。你可以從 Java Reflection Tutorial查看!

相關問題