В Java я пытаюсь создать экземпляр класса, который передается как параметр. Например:
public Class<? extends superclass> theClass;
public constructor(Class<? extends superclass> myClass){
this.theClass = myClass;
}
public superclass getInstance(){
return < AN INSTANCE OF theClass >
}
Я не знаю, как создать экземпляр класса theClass
... Возможно ли это, или мне нужно найти другой способ сделать это?
Буду признателен за любую оказанную помощь.
Да, возможно:
return this.theClass.newInstance();
Подробнее в java.lang.Class
и java.lang.reflect
, включая способ поиска других конструкторов, которые может иметь класс, и способ их вызова с аргументами.
Например, предположим, вы знаете, что вам нужно вызвать конструктор, который принимает аргумент String
. Вы можете использовать getConstructor
для поиска этого конструктора:
Constructor ctor = this.theClass.getConstructor(String.class);
... и затем назовите его
return ctor.newInstance("the string");
Вы можете вызвать Class#newInstance()
:
public Superclass getInstance() throws InstantiationException, IllegalAccessException {
return theClass.newInstance();
}
Из Javadocs:
Создает новый экземпляр класса, представленного этим объектом
Class
. Класс создается таким образом, как будтоnew
выражением с пустым списком аргументов. Класс инициализируется, если он еще не был инициализирован.