我正在尝试创建一个接收类(任何类)并返回此类的实例的方法。 (就像“ Spring ”)。有了这个代码我该怎么办?
主要:
public static void main(String[] args) {
Factory factoria = new Factory();
Auto auto = factoria.getObject(Auto.class);
System.out.println(auto.Motor);
}
工厂类(getObject 是我正在尝试执行的方法):
public Class<?> getObject(Class<?> clase) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
Class<?> cls = Class.forName(clase.getName());
Class<?> objetoRaiz = (Class<?>) cls.newInstance();
// if @Component
procesar(objetoRaiz);
return objetoRaiz;
}
最佳答案
最好使用默认构造函数,因为这可能会引发异常并通常会处理某些内容。
public <T> T createObject(Class<T> type) throws NoSuchMethodException,
InstantiationException, IllegalAccessException, InvocationTargetException {
return type.getConstructor().newInstance();
}
或者在使用方面更容易:
public <T> T createObject(Class<T> type) throws IllegalArgumentException {
try {
return type.getConstructor().newInstance();
} catch (NoSuchMethodException | InstantiationException
| IllegalAccessException | InvocationTargetException e) {
throw new IllegalArgumentException(e);
}
}
<小时/>
Holger 反馈后:
有一个共同的基类:NoSuchMethodException
、InstantiationException
、IllegalAccessException
和 InitationTargetException
。最好的是:
public <T> T createObject(Class<T> type) throws ReflectiveOperationException {
return type.getConstructor().newInstance();
}
关于java - 返回动态类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56132993/