Vla*_*mir 34 java reflection serialization constructor default-constructor
我有一个没有默认构造函数的类.我需要一种方法来获得这个类的"空白"实例.'blank'表示在实例化之后,所有类字段都应该具有默认值,如null,0等.
我问,因为我需要能够序列化/绝望化大对象树.并且我无法访问此对象类的源,并且类既没有默认构造函数也没有实现可序列化.尝试序列化这样的结构可能不是一个好主意,但另一种方法是将其转换为更容易序列化的东西.
Bra*_*pit 32
使用标准反射,没有,但有一个库可以为你做到:objenesis.
它专门用于实例化没有默认构造函数的类,并且它被其他序列化库(如xstream)使用.
注意:在这些情况下可能不会调用构造函数(但这可能是您想要的).
mcv*_*eat 20
将Class实例作为变量clazz提供:
ReflectionFactory rf = ReflectionFactory.getReflectionFactory();
Constructor objDef = parent.getDeclaredConstructor();
Constructor intConstr = rf.newConstructorForSerialization(clazz, objDef);
clazz.cast(intConstr.newInstance());
Run Code Online (Sandbox Code Playgroud)
如http://www.javaspecialists.eu/archive/Issue175.html中所述
您的解决方案将特定于JVM.
如果您需要便携式解决方案,请使用第三方库.
对于Sun的JVM v1.5,您可以这样做:
final Class<?> myClass = MyClass.class;
final ReflectionFactory reflection = ReflectionFactory.getReflectionFactory();
final Constructor<Object> constructor =
reflection.newConstructorForSerialization(
myClass, Object.class.getDeclaredConstructor(new Class[0]));
final Object o = constructor.newInstance(new Object[0]);
System.out.print(o.getClass());
Run Code Online (Sandbox Code Playgroud)
XStream中的相关类是: