从类对象实例化类
2022-09-02 01:04:30
在java中,我可以使用类对象来动态实例化该类型的类吗?
即,我想要一些这样的功能。
Object foo(Class type) {
// return new object of type 'type'
}
在java中,我可以使用类对象来动态实例化该类型的类吗?
即,我想要一些这样的功能。
Object foo(Class type) {
// return new object of type 'type'
}
在Java 9及以后,如果有一个声明的零参数(“nullary”)构造函数,你可以使用Class.getDeclaredConstructor()
来获取它,然后在它上面调用newInstance():
Object foo(Class type) throws InstantiationException, IllegalAccessException, InvocationTargetException {
return type.getDeclaredConstructor().newInstance();
}
在Java 9之前,你会使用Class.newInstance
:
Object foo(Class type) throws InstantiationException, IllegalAccessException {
return type.newInstance();
}
...但是从Java 9开始,它就被弃用了,因为它抛出了构造函数抛出的任何异常,甚至检查了异常,但(当然)没有声明那些检查的异常,有效地绕过了编译时检查的异常处理。 将构造函数中的异常包装进去。Constructor.newInstance
InvocationTargetException
上述两者都假设存在一个零参数构造函数。一个更健壮的途径是通过Class.getDeclaredConstructors
或Class.getConstructors
,它引导你使用java.lang.reflect包中的Reflectrum
内容,以找到一个构造函数,其参数类型与你打算给它的参数相匹配。
用:
type.newInstance()
使用空开销生成器创建实例,或使用方法 type.getConstructor(..) 获取相关构造函数,然后调用它。