Могу ли я сделать это на Java? - PullRequest
1 голос
/ 02 января 2012

Есть ли способ сделать это в 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();
...

Ответы [ 4 ]

7 голосов
/ 02 января 2012

Вы должны сделать что-то вроде этого:

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 голосов
/ 02 января 2012

Вы можете использовать отражение Java, чтобы сделать это. С помощью отражения Java вы можете получить идентификатор класса, а затем получить конструктор, а затем новый экземпляр с ним. Вы можете проверить это из Учебник по Java-отражению !

0 голосов
/ 02 января 2012

Это то, что вы хотите?

Class[] classes = {A.class, B.class, A.class, A.class};
int i = 2;
Object obj = classes[i].newInstance();
0 голосов
/ 02 января 2012

Вместо классов вы можете поместить экземпляры соответствующих классов непосредственно в массив без необходимости их повторного создания.

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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...