2

我正在尝试对一些 java 对象进行序列化。为此,我想实例化(对我而言)未知类,这些类可能没有默认构造函数。由于我不知道应该如何调用其他构造函数(我可以知道参数,是的,但这不是很有帮助),我只想创建一个类的“空白”实例。

之后我会使用反射来设置它的属性。

这有可能吗?

4

2 回答 2

6

可以使用 Unsafe 类。此外,还有可能使用这个 sun.x 类获得“constructorForSerialization”:

ReflectionFactory.getReflectionFactory().
    newConstructorForSerialization(clazz, c);
于 2013-11-04T16:32:13.313 回答
1

简而言之,没有。

但是,您可以通过多种方式调用构造函数。它可能是“默认”构造函数,也可能是代码中未实际表达的构造函数,或者是在执行其他项目(如反序列化)时内部的构造函数。

构造函数返回一个引用,它由几个重要的内部步骤组成。

  1. JVM 需要在堆上分配内存来保存类的成员数据(以及对支持项的引用)。
  2. 该内部 JVM 数据结构的地址被赋予类型安全的引用。
  3. 调用适当的<init>(...)方法(从事物的编程方面来看,这是人们认为的构造方法,通常写成public Object(...) { ... })。
  4. 引用返回到执行上下文。

所以构造不仅仅是你调用的代码,它是对象创建的实现。您可以通过各种方式避免提供init方法,但构建所需的内部操作并不是真正可以跳过的。如果是,那么您将缺少对象引用。

于 2013-11-04T15:49:34.673 回答