当前位置: 首页 > 面试题库 >

在Java中是否可以使用反射创建没有no-arg构造函数的类的“空白”实例?

钦德佑
2023-03-14
问题内容

我有一个没有默认构造函数的类。我需要一种获取此类的“空白”实例的方法。“空白”表示实例化之后,所有类字段均应具有默认值,例如null,0等。

我问是因为我需要能够序列化/理想化大对象树。而且我无法访问此对象类的源,并且类既没有默认构造函数,也没有实现可序列化的类。尝试序列化这种结构可能不是一个很好的主意,但替代方法是将其转换为更易于序列化的内容。


问题答案:

使用标准反射时,不需要,但是有一个库可以为您做到这一点:objenesis。

它是专门为不使用默认构造函数实例化类而设计的,并且由xstream等其他序列化库使用。

注意:在这些情况下,可能不会调用构造函数(但这大概就是您想要的)。



 类似资料:
  • 问题内容: Oracle Java教程站点的这一段使我感到困惑: 所有类都有至少一个构造函数。如果一个类未显式声明任何类,则Java编译器会自动提供一个无参数的构造函数,称为默认构造函数。此默认构造函数调用类父级的无参数构造函数,如果该类没有其他父级,则调用Object构造函数。如果父级没有构造函数(对象确实有一个构造函数),则编译器将拒绝该程序。 如果所有对象都直接或间接继承自Object,那么

  • 问题内容: 例如: 清除代码。 但是,如果我添加带有参数的构造函数,则如下所示: 我懂了: 因此,不,我不知道如何通过构造函数传递参数。 请帮忙。 问题答案: 您需要说出您要使用pass it参数的构造函数。

  • 问题内容: 我正在尝试修复我的一个程序中的错误,我认为这可能是由于Hibernate弄清楚了如何在不调用其默认(或任何其他)构造函数的情况下实例化对象的实例。 问题答案: 实际上,是的,如果使用objenesis为您实例化对象,则可以在实例化对象时绕过构造函数。它执行字节码操作来实现此目的。 反序列化对象也将绕过构造函数。 使用反射无法做到这一点。

  • 问题内容: 我正在为这个错误而苦苦挣扎: 08-08 11:42:53.179:E / AndroidRuntime(20288):由以下原因引起:java.lang.InstantiationException:无法实例化com.example.localnotificationtest.ReminderService类;没有空的构造函数 我不明白为什么会发生此错误。 我试图在特定时间显示通知,

  • 我学到了两件事: -操作符创建一个新实例,然后执行声明的connstuctor来初始化该新实例 根据我的理解,这些说法互相反对。 例如,不会创建两个实例,因为-操作符创建一个实例,构造函数调用并创建另一个实例?当然不会,但现在到底是什么创建了一个实例。。。?

  • 问题内容: 构造函数可以是私有的吗?私有构造函数有何用处? 问题答案: 是的,构造函数可以是私有的。这有不同的用途。一个这样的用途是用于singleton设计反模式,我建议您不要使用它。另一个更合法的用法是委托构造函数;您可以有一个构造函数,它接受许多不同的选项,这实际上是一个实现细节,所以您将其设为私有,但剩余的构造函数将其委托给它。 作为委托构造函数的一个例子,下面的类允许您保存一个值和一个类