在java中,是否可以使用反射在没有无arg构造函数的情况下创建类的“空白”实例?

我有一个没有默认构造函数的类。我需要一种方法来获取这个类的“空白”实例。“blank”意味着在实例化之后,所有类字段都应该有默认值,如null,0等。

我之所以问这个问题,是因为我需要能够序列化/desirialize大型对象树。而且我无法访问此对象类的源,并且类既没有默认构造函数也没有可实现的可序列化。尝试序列化这种结构可能不是很好的想法,但另一种方法是将其转换为更易于序列化的东西。


答案 1

使用标准反射,不,但是有一个库可以为您做到这一点:淫秽

它专门设计用于在没有默认构造函数的情况下实例化类,并且由其他序列化库(如 xstream)使用。

注意:在这些情况下可能不会调用构造函数(但这可能是您想要的)。


答案 2

将类实例作为变量 clazz 提供:

ReflectionFactory rf = ReflectionFactory.getReflectionFactory();
Constructor objDef = parent.getDeclaredConstructor();
Constructor intConstr = rf.newConstructorForSerialization(clazz, objDef);
clazz.cast(intConstr.newInstance());

http://www.javaspecialists.eu/archive/Issue175.html 中所述