1

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

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

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

然后有一个问题,因为超类不是通过使用 Unsafe 来实例化的。但我认为 Unsafe 是最接近 C 代码“new”操作符调用的,至少是其中的一部分。

所以问题是,当我们拥有的唯一信息是类的限定名(当然,它存在于类路径中的某处! )

4

2 回答 2

0

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

于 2013-11-01T12:23:24.027 回答
0

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

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

于 2013-11-01T12:28:54.083 回答