Вы хотите создать экземпляр класса по его имени?
Прежде всего, вам необходимо создать Class<?>
объект:
Class<?> cls = Class.forName(strClassName);
Затем создать экземплярэто (обратите внимание, это может привести к различным исключениям - нарушение доступа, ClassNotFound
, нет public конструктор без аргументов и т. д.)
Object instance = cls.newInstance();
Затем вы можете привести его:
return (SomeClass) instance;
Пожалуйста, убедитесь, что вы понимаете разницу между:
- Класс имя (приблизительно имя файла)
- Класс объект (по сути тип информация)
- Класс экземпляр (фактический объект этого типа)
Вы также можетеприведите объект cls
к типу Class<? extends SomeClass>
, если хотите.Это не дает вам много, хотя.И вы можете встроить его в:
return (SomeClass)(Class.forName(strClassName).newInstance());
О, но вы можете выполнить проверку типа с помощью объекта cls
, прежде чем создавать его.Таким образом, вы создаете его только в том случае, если он удовлетворяет вашему API (реализует интерфейс, который вы хотите получить).
РЕДАКТИРОВАТЬ: добавить дополнительный пример кода к отражению .
Дляпример:
if (cls.isInstance(request)) {
// ...
}
Для вызова методов вам либо нужно знать интерфейс, который вы можете привести, либо использовать reflections (методы getMethod
объекта cls
):
Method getRequest = cls.getMethod("getRequest");
getRequest.invoke(request);