实例化没有默认构造函数的类

时间:2013-11-01 12:19:29

标签: java introspection objectinstantiation

对于许多框架开发,我们需要通过从配置文件中读取限定的类名来实例化类。

有不同的内省策略,以及面向它的专用库(如Objenesis)。

但是,对于没有默认构造函数(重载)的类,我相信如果我们不知道重载构造函数的签名就没有内省工作。非标准方法是使用sun.misc.Unsafe类进行分配。这就是我的理解。这是正确的理解吗?

然后有一个问题,因为超级类没有使用Unsafe实例化。但我认为Unsafe是最接近任何C代码'new'运算符调用的,至少是它的一部分。

所以问题是,我们是否有Java方式以新操作符的方式实例化对象,通过某种形式的内省,当我们拥有的唯一信息是类的限定名称时(当然,它存在于某处) classpath!)

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题但通常在java中,如果你知道你可以简单写的类名: classname myObject = new classname();

答案 1 :(得分:0)

如果您拥有的是一个类名,则可以使用Class.newInstance(),但如果它没有默认构造函数,则可以使用Unsafe.allocateInstance()。

您可以使用反射来查找要调用的构造函数,但是您不知道要传递哪个或哪些参​​数。