Если вы хотите создать объект с помощью конструкторы без аргументов:
void myMethod(Class<?> aReceived) {
Object newObject = aReceived.newInstance();
...
}
Если вы хотите создать объект через два-Arg конструкторы (с строкой , Int):
void myMethod(Class<?> aReceived) {
Object newObject = aReceived.getConstructor(String.class, int.class)
.newInstance("aaa", 222);
...
}
Наконец, вы можете использовать дженерик, чтобы правильно установить тип newObject
переменных (в верхней части любого из указанных выше фрагментов):
void myMethod(Class<T> aReceived) {
T newObject = aReceived.getConstructor(String.class, int.class)
.newInstance("aaa", 222);
...
// Sadly, due to erasure of generics you cannot do newObject.SomeMethodOfT()
// because T is effectively erased to Object. You can only invoke the
// methods of Object and/or use refelection to dynamically manipulate newObject
}
[Приложение]
Как называется этот метод?
Вариант 1 - когда вы знаете, в коде написания времени, какой класс вы хотите, чтобы перейти к методу:
myMethod(TestClass.class)
Вариант 2 - когда имя класса, который будет реализованным известно только в во время выполнения, как строка:
String className = ....; // Name of class to be instantiated
myMethod(Class.forName(className));
Я использовал aReceived.newInstance(); и изначально я получил такую ошибку: unreported exception java.lang.InstantiationException; должны быть пойманы или объявлены брошенными. Я решил, добавив «throws Exception» в конец объявления myMethod, которое, похоже, прояснилось. Однако теперь мне не удается вызвать метод: попробовали использовать myMethod (testClass); где testClass - это тот, который я также определил в коде. Есть идеи? Еще раз спасибо за вашу помощь;) – eJm
Добавил еще один раздел к моему ответу ниже, чтобы решить проблему, которую вы описываете. –