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