簡體   English   中英

聲明類對象的正確方法是什么?

[英]What is the proper way to declared class objects?

這只是一個快速的問題,可以解決我不久前偶然發現的糾紛(對不起,我沒有鏈接)。

我如何聲明對象是這樣的:

class Foo {

   private Bar aBar = new Bar();

   ...

}

現在,我發現的爭議表明這是錯誤的Java。 我不知道他為什么這么說,但他很堅定。 他提出的建議是,所有對象都應在類主體中聲明,但必須在構造函數之前實例化。 誰能為我闡明這一點? 在構造函數中實例化對象確實更好嗎?

TFYT

〜伊頓

編輯1:

我知道我曾經使用“爭議”一詞,但我不打算對此進行辯論。

在大多數情況下,這並不重要。 我的經驗法則是:

  • 如果要在所有構造函數中使用相同的表達式初始化變量,並且該變量不依賴任何參數,請在聲明時進行操作。
  • 否則,無論如何,您幾乎都被迫在構造函數中執行此操作。

推理:通過在聲明時進行初始化,很明顯 ,無論構造函數和參數如何,都將以相同的方式分配值。 它還使您的構造函數更簡單,並且沒有重復。

警告:不要在一個構造函數賦值,否則是無效的以前的清晰度:)

我建議您向同事(或其他任何人)詢問具體原因,以使其聲稱您當前的代碼“不正確”。 我敢肯定還有其他有效的觀點,但是如果他不能提供任何理由,那么就沒有理由關注IMO。

另一個簡短的說明-我假設所有初始化器都不需要做任何重要的工作。 如果這樣做,可能會造成混亂,特別是如果引發異常。 總的來說,我不喜歡我的構造函數做很多工作。

通過在構造函數中分配屬性,可以立即清楚地實例化類時將運行哪些代碼。
如果在字段聲明中賦值,那么閱讀類構造函數的人將不會意識到該字段已在其他位置設置。

構造函數的約定是創建一個在語義上有效的實例。 也就是說,所有字段都已正確初始化為合理的值,依此類推。 因此,初始化構造函數中的所有內容有助於弄清楚是什么使您的類成為有效實例。 另外,當您有多個構造函數時,可以使用類似構造函數鏈接的機制來避免重復相同的代碼。

但是,這只是一種類似教科書的理論,在現實生活中,您有時會做更方便的事情。 因為無論您在聲明時實例化對象與否,都幾乎沒有什么區別,所以不需要任何導致爭議的強勢立場。

暫無
暫無

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

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