我听说过JavaBean的规则,其中第一个和主要规则是,对于每个JavaBean类,显式程序员应该提供公共默认构造函数。 请任何人解释为什么我们需要为JavaBean提供默认构造函数
更新:
请清楚解释一下,为什么jvm不会为JavaBeans提供默认构造函数以及jvm如何对提供默认构造函数做出反应
答案 0 :(得分:12)
我听说过JavaBean的规则,其中第一个和主要规则是,对于每个JavaBean类,显式程序员应该提供公共默认构造函数。请任何人解释为什么我们需要为JavaBean提供默认构造函数
JavaBean实例是通过对no-arg构造函数的反射调用创建的。所以必须是这样的构造函数。
请清楚解释一下,为什么jvm不会为JavaBeans提供默认构造函数以及jvm如何对提供默认构造函数做出反应
如果您没有明确提供构造函数,则jvm 将为JavaBean提供默认构造函数。如果做提供构造函数,除了使用参数定义的任何构造函数之外,还必须提供无参数构造函数。
答案 1 :(得分:1)
我们可能会在我们的bean中添加一些带有参数的其他构造函数,如果我们没有在我们的类中包含Default构造函数,其他构造函数会影响它,从而使它不再是一个有效的bean。
答案 2 :(得分:0)
根据我的经验,它可以防止有人添加带参数的构造函数,从而有效地删除默认构造函数。通过显式实现更不可能发生的默认构造函数。
答案 3 :(得分:0)
这就是wikipedaia所说的Java Bean Wikipedia article
该类必须具有公共默认构造函数(无参数)。这允许在编辑和激活框架内轻松实例化。
实际上,如果它获得默认构造函数,则可以通过内省来实现类
getClass().getClassLoader().loadClass("mypackage.myclass").newInstance();
答案 4 :(得分:0)
我怀疑这是对语法和生成的类之间差异的误解。
public class Alpha {
}
public class Beta {
public Beta() {}
}
在Alpha
中,默认构造函数是隐式的;在Beta
中它是明确的。根据JavaBean规范,它们都有默认的公共构造函数。
public class Gamma {
private final Type t;
public Gamma(Type t) {
this.t = t;
}
}
另一方面,Gamma
不符合要求,因为没有公共的无参数构造函数。如果没有关于如何填充构造函数的上下文,就无法实例化此对象。