【问题标题】:Is it possible to call the default-constructor instead of the zero-argument constructor?是否可以调用默认构造函数而不是零参数构造函数?
【发布时间】:2011-05-05 10:23:11
【问题描述】:
我有一个 util 类,它应该使用反射调用给定 Class 对象的方法。
现在它使用 .newInstance() 创建一个新实例,然后调用我要测试的方法。
问题是我的一些类的零参数构造函数由于缺少依赖项等而引发异常,并且使我无法调用我实际想要测试的方法。
是否可以调用 Java 的默认构造函数来代替自定义的零参数构造函数来创建实例?
【问题讨论】:
标签:
java
reflection
constructor
instantiation
【解决方案1】:
如果类没有定义构造函数,你只有一个默认构造函数。
无参数构造函数应该只接受你给它的依赖项(即没有),看起来你相信你仍然可以在没有额外依赖项的情况下使用这个类。
在 Sun/Oracle JVM 中,您可以使用 Unsafe.allocateInstance(Class) 创建实例而不调用构造函数,但我会尝试先修复您的类设计。
【解决方案2】:
只有当您自己不提供构造函数时,才会创建默认构造函数。
因此,只要您的类至少有一个构造函数,就不会创建默认构造函数。