为什么应该在javabean类中提供公共构造函数

时间:2012-02-22 11:51:47

标签: java javabeans

我听说过JavaBean的规则,其中第一个和主要规则是,对于每个JavaBean类,显式程序员应该提供公共默认构造函数。 请任何人解释为什么我们需要为JavaBean提供默认构造函数

更新:

请清楚解释一下,为什么jvm不会为JavaBeans提供默认构造函数以及jvm如何对提供默认构造函数做出反应

5 个答案:

答案 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不符合要求,因为没有公共的无参数构造函数。如果没有关于如何填充构造函数的上下文,就无法实例化此对象。