У меня есть абстрактный класс «A», а класс «B» и «C» расширяют A.
Я хочу создать их экземпляры во время выполнения на основе некоторой переменной. Примерно так:
public abstract class A {
public abstract int count();
}
public class B extends A {
public int count () {
//print 10;
}
}
public class C extends A {
public int count () {
//print 20;
}
}
Я бы использовал приведенный ниже код для вызова счетчика методов:
String token;
int i = 10;
if (i == 10) //edit
token = "B";
else
token = "C";
A a;
try {
a = (A) (Class.forName("org.source."+token)).newInstance();
} catch (Exception e) {
//print e
}
a.count();
Так как я новичок в java отражениях, вот мои 2 вопроса:
Правильно ли то, что я делаю выше (изменить: в случае конструкторов по умолчанию)? (Я предполагаю, да)
Выше работает, если вызывается конструктор по умолчанию (без параметров). Как бы я справился с ситуацией, когда у меня есть конструкторы, которые принимают аргументы. Я не очень уверен, как я мог бы использовать Constructor.newInstance () можно использовать в вышеуказанной ситуации.
Любая помощь приветствуется,