簡體   English   中英

為什么在Java中鍵入自變量構造函數時未提供默認構造函數?

[英]Why the default constructor is not provided when typing an argument-ed constructor in java?

在Java中,如果我們為一個類鍵入一個自變量構造函數,則不能調用它的默認參數減去構造函數。 我知道這是因為如果我們鍵入任何參數編輯的構造函數,編譯器將不提供默認參數,而較少提供構造函數。 但是我的問題是設計這樣的原因是什么?

如果為構造函數提供參數,則假定將使用有效狀態創建對象。

如果默認情況下暴露了無參數構造函數(並且類的創建者未采取防御措施),則有人可能會無意中創建無效的對象,即沒有足夠信息才能正確的對象。

通過強迫我們提供無參數的構造函數,Java迫使我們明確地傳達出可以創建沒有這些初始值/狀態的對象是可以的。

簡而言之:Java試圖將我們從自己中解救出來,因為我們草率而健忘。

這是為了使類設計者可以禁止使用非參數構造函數。

這可能有多種原因,例如,類中有一些通過構造函數參數初始化的成員,因此在函數中,類可以安全地假定這些成員不為null。

如果默認構造函數仍然可用,則每個函數都應檢查此成員是否為null。

當您不提供構造函數時,它將假定您需要一個構造函數並為您創建一個。

提供構造函數時,它假定您知道自己在做什么,並且將提供真正想要的每個構造函數。 這是為了防止創建無效的默認構造函數。

可以做到:編譯器可以看到沒有默認的構造函數,但是有一個(T ...)構造函數,然后創建一個:

...() { this(new T[0]); }

它要么被遺忘,要么被認為丑陋。 出現(U ...)時該怎么辦?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM