2012-01-02 2 views
1

Есть ли способ сделать это на Java?Могу ли я сделать это на Java?

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

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

и нет, я не хочу использовать любое сослагательное наклонение или переключатели, как показано ниже

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

+0

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

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 reflection для этого. С отражением Java вы можете получить идентификатор «Class», а затем получить конструктор, а затем новый экземпляр с ним. Вы можете проверить это с Java Reflection Tutorial!

Смежные вопросы