RRR*_*R_J 15 java constructor default-constructor
为什么我们在许多Java相关API中需要一个默认的无参数构造函数?像一般规则一样,所有java bean类或实体类(JPA等)或JAX-WS实现类都需要显式的无参数构造函数.
如果默认情况下Java提供了无参数构造函数,那么为什么这些标准中的大多数需要显式构造函数?
Sto*_*ica 16
如果没有定义其他构造函数, Java仅提供默认的无参数构造函数.因此,如果您有其他构造函数,则必须自己明确定义一个无参数构造函数.
这些框架使用反射API并查看方法名称以确定如何设置属性.构造函数的参数只能通过类型而不是名称来查找,因此框架无法可靠地将属性与构造函数args匹配.因此,它们需要一个无参数构造函数来创建对象,然后可以使用setter方法来初始化数据.
pol*_*nts 11
我相信需要public
nullary构造函数的框架是这样做的,因为它们使用反射来实例化类型,例如通过Class.newInstance()
.
至于为什么默认构造函数可能不适用于这种情况,这里是相关的JLS部分:
JLS 8.8.9默认构造函数
如果a不
class
包含构造函数声明,则会自动提供不带参数的默认构造函数:
- 如果
class
声明了public
,则默认构造函数被隐式赋予访问修饰符public
;- 如果声明了类
protected
,则默认构造函数被隐式赋予访问修饰符protected
;- 如果声明了类
private
,则默认构造函数被隐式赋予访问修饰符private
;- 否则,默认构造函数具有无访问修饰符隐含的默认访问权限.
因此,在public
类中,默认构造函数具有正确的可见性,但是否则public
必须提供明确的可见性.