我正在尝试创建一个接收一个类(任何类)并返回该类实例的方法。 (就像“春天”)。我该怎么办呢?
主要:
public static void main(String[] args) {
Factory factoria = new Factory();
Auto auto = factoria.getObject(Auto.class);
System.out.println(auto.Motor);
}
Factory类(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;
}
答案 0 :(得分:1)
最好使用默认构造函数,因为它可能引发异常并在一般情况下处理某些事情。
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
和InvocationTargetException
的通用基类。最好的是:
public <T> T createObject(Class<T> type) throws ReflectiveOperationException {
return type.getConstructor().newInstance();
}