我正在尝试对一些java对象进行序列化。为此,我想实例化(对我来说)未知的类,它们可能没有默认的构造函数。因为我不知道应该如何调用其他构造函数(我可以知道参数,是的,但这不是很有用),我想创建一个类的“空白”实例。
之后我会使用反射来设置它的属性。
这有可能吗?
答案 0 :(得分:6)
可以使用Unsafe类。此外,有可能使用此sun.x类
获取“constructorForSerialization”ReflectionFactory.getReflectionFactory()。newConstructorForSerialization(clazz,c);
答案 1 :(得分:1)
简而言之,没有。
但是,您可以通过多种方式调用构造函数。它可能是一个“默认”构造函数,或者在代码中实际没有表达的构造函数,或者是在执行其他项时的内部构造函数,如反序列化。
构造函数返回一个引用,它包含一些重要的内部步骤。
<init>(...)
方法(从编程方面来看,这是人们认为的构造方法,典型地编写public Object(...) { ... }
)。因此构造不仅仅是您调用的代码,它还是Object创建的实现。您可以通过各种方式避免提供init
方法,但构造所需的内部操作实际上并不可跳过。如果是,那么你将缺少对象参考。