对于许多框架开发,我们需要通过从配置文件中读取限定的类名来实例化类。
有不同的内省策略,以及面向它的专用库(如Objenesis)。
但是,对于没有默认构造函数(重载)的类,我相信如果我们不知道重载构造函数的签名就没有内省工作。非标准方法是使用sun.misc.Unsafe类进行分配。这就是我的理解。这是正确的理解吗?
然后有一个问题,因为超级类没有使用Unsafe实例化。但我认为Unsafe是最接近任何C代码'new'运算符调用的,至少是它的一部分。
所以问题是,我们是否有Java方式以新操作符的方式实例化对象,通过某种形式的内省,当我们拥有的唯一信息是类的限定名称时(当然,它存在于某处) classpath!)
答案 0 :(得分:0)
我不确定我是否理解你的问题但通常在java中,如果你知道你可以简单写的类名: classname myObject = new classname();
答案 1 :(得分:0)
如果您拥有的是一个类名,则可以使用Class.newInstance(),但如果它没有默认构造函数,则可以使用Unsafe.allocateInstance()。
您可以使用反射来查找要调用的构造函数,但是您不知道要传递哪个或哪些参数。