在java中,如果我们为类键入一个参数化的构造函数,我们就不能调用它的默认参数less constructor。我知道这是因为如果我们输入任何参数构造函数,编译器不提供默认参数less constructor。但我的问题是这样设计它的原因是什么?
答案 0 :(得分:4)
如果为构造函数提供参数,则假定将使用有效状态创建对象。
如果默认情况下暴露了无参数构造函数(并且该类的创建者没有采取防御措施),则有可能无意中创建了一个无效对象 - 一个没有足够信息正确的对象。 / p>
通过强制我们提供一个无参数构造函数,Java强制我们明确地告知可以创建一个没有那些初始值/状态的对象。
Nutshell:Java正试图将我们从自己身上拯救出来,因为我们是邋and和健忘。
答案 1 :(得分:1)
允许类设计者禁止使用非参数构造函数。
这可能是由于各种原因,例如:该类有一些成员通过构造函数参数初始化,因此在函数中,类可以安全地假设这些成员不为null。
如果默认构造函数仍然可用,则每个函数都应检查此成员是否为null。
答案 2 :(得分:1)
当您不提供构造函数时,它假定您需要一个构造函数并为您创建一个构造函数。
当你提供构造函数时,它假定你知道你在做什么,并且你将提供你真正想要的每个构造函数。这是为了防止创建无效的默认构造函数。
答案 3 :(得分:0)
可以这样做:编译器可以看到没有默认构造函数,但是有一个(T ...)构造函数,并创建一个:
...() { this(new T[0]); }
要么被遗忘,要么被认为是丑陋的。什么时候有(U ...)?