【发布时间】:2010-06-14 11:23:08
【问题描述】:
在java中,我可以使用类对象来动态实例化该类型的类吗?
即我想要一些这样的功能。
Object foo(Class type) {
// return new object of type 'type'
}
【问题讨论】:
标签: java class new-operator
在java中,我可以使用类对象来动态实例化该类型的类吗?
即我想要一些这样的功能。
Object foo(Class type) {
// return new object of type 'type'
}
【问题讨论】:
标签: java class new-operator
在 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 包中的反射内容,以找到参数类型与您打算给它的参数匹配的构造函数。
【讨论】:
用途:
type.newInstance()
对于使用空的构造函数创建实例,或者使用方法type.getConstructor(..)获取相关构造函数然后调用它。
【讨论】:
是的,它被称为反射。您可以为此使用 Class newInstance() 方法。
【讨论】:
使用 newInstance() 方法。
【讨论】: