Java 是否可以在不调用任何构造函数的情况下实例化类?
我正在尝试对一些java对象进行序列化。为此,我想(对我)实例化未知类,这些类可能没有默认构造函数。由于我不知道应该如何调用其他构造函数(我可以知道参数,是的,但这不是很有帮助),我只想创建一个类的“空白”实例 之后,我将使用反射来设置它的属性 这有可能吗?简言之,没有 但是,可以通过多种方式调用构造函数。它可能是一个“默认”构造函数,或者不是在代码中实际表达的构造函数,或者在执行其他项(如反序列化)时是内部的构造函数 构造函数返回一个引用,该引用由几个重要的内部步骤组成Java 是否可以在不调用任何构造函数的情况下实例化类?,java,serialization,reflection,Java,Serialization,Reflection,我正在尝试对一些java对象进行序列化。为此,我想(对我)实例化未知类,这些类可能没有默认构造函数。由于我不知道应该如何调用其他构造函数(我可以知道参数,是的,但这不是很有帮助),我只想创建一个类的“空白”实例 之后,我将使用反射来设置它的属性 这有可能吗?简言之,没有 但是,可以通过多种方式调用构造函数。它可能是一个“默认”构造函数,或者不是在代码中实际表达的构造函数,或者在执行其他项(如反序列化)时是内部的构造函数 构造函数返回一个引用,该引用由几个重要的内部步骤组成 JVM需要在堆上分配内
(…)
方法(从编程的角度来看,这就是人们认为的构造函数方法,通常是编写公共对象(…){…}
)因此,构造不仅仅是您调用的代码,它是对象创建的实现。您可以通过各种方式避免提供
init
方法,但是构造所需的内部操作实际上是不可跳过的。如果是,那么您将缺少对象引用。使用不安全类是可能的。此外,还可以使用此sun.x类获得“constructorForSerialization”:
ReflectionFactory.getReflectionFactory().
newConstructorForSerialization(clazz, c);
正如@SotiriosDelimanolis所说,这是不可能的。这在一定程度上是为了让类作者控制如何实例化其类的实例,例如,在创建单例对象时,在类上经常使用私有构造函数。您试图反序列化什么类型的对象?它也通过序列化完成。谢谢@SotiriosDelimanolis,我将尝试使用objenesis