2012-01-02 15 views
1

Javaでこれを行う方法はありますか?Javaでこれを行うことはできますか?

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

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

なし、私はあなたがする必要がなく、アレイに直接対応するクラスのistancesを置くことができる代わりに、クラスの

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()が機能するためにはデフォルトコンストラクタ(引数なしの1)を持っている必要があります。

+0

何らかの理由で、newInstance()がInstantiationExceptionをスローします。 – adrianton3

+0

[Class.newInstance()](http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#newInstance )) –

0

以下のような任意のIFSまたはスイッチを使用したくありませんそれらを再インスタンス化する。

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のリフレクションでは、「クラス」アイデンティティーを取得してコンストラクターを取得し、次にそれを使用して新しいインスタンスを取得できます。あなたは Java Reflection Tutorialからそれをチェックアウトすることができます!

関連する問題