從設計角度來看,什麼時候最好刪除方法參數,而是使用構造函數參數,而方法可以使用已經初始化爲構造函數參數的類變量?構造函數參數或方法參數?
2
A
回答
4
當不能使用這些參數完全初始化類的對象時,使用構造函數參數。例如:如果您正在創建Employee類,並且您希望Employee的每個實例都必須有名稱,那麼您應該在構造函數中使用name作爲參數。另一個例子是,你不能創建
File
類,而沒有指定要打開的文件的名稱。僅在方法上下文中相關的參數應作爲方法參數傳遞。例如,可以在向類
List
添加新項目時使用。這可能會在內部更新對象的狀態,但是這就是這個類的工作原理 - 它有內部數據結構來維護列表,方法是用來操縱這些狀態的。有時底層框架可能希望您使用setter方法初始化狀態。當使用像Hibernate這樣的ORM或者在MVC框架(例如Spring MVC)中使用Web表單中的Model對象等POJO Bean時,通常會出現這種情況。在這些情況下,這些類通常代表Value Object,並且一般不會將構造函數中的參數作爲框架使用默認無參數構造器實例化對象。可以使用構造函數或使用setter方法注入依賴項。在這種情況下,您應該針對強制性依賴關係使用構造器參數,並使用setter作爲可選依賴項 - 儘管沒有必要這樣做。你可以把它當作指導。
相關問題
- 1. 沒有參數的構造函數或參數構造函數
- 2. Java - 方法vs構造函數參數
- 3. 無參數構造函數調用2參數構造函數
- 4. 與構造函數參數
- 5. 從構造函數參數
- 6. 構造函數的參數
- 7. TabStopSpan.Standard構造函數參數
- 8. 構造函數的參數
- 9. 參數類構造函數
- 10. Ninject:構造函數參數
- 11. StructureMap構造函數參數
- 12. 無參數構造函數
- 13. ConcurrentHashMap構造函數參數?
- 14. 無參數構造函數
- 15. swiftsuspenders構造函數參數?
- 16. LinearGradientBrush構造函數參數
- 17. 通過參數化構造函數作爲方法參考
- 18. 構造函數參數無法識別
- 19. 從C#中的參數化構造函數調用無參數構造函數?
- 20. 無參數的構造函數V/S構造函數使用參數
- 21. JS - 構造函數參考
- 22. 構造函數和無參數構造函數?
- 23. 從構造函數中獲取JSON的構造函數參數?
- 24. 從參數化構造函數調用默認構造函數
- 25. 構造函數調用具有參數的構造函數
- 26. 將類作爲模板參數,並將類構造函數的參數作爲方法參數的方法
- 27. C++數組構造函數的參數
- 28. 何時使用參數化方法VS參數的構造函數在Java中
- 29. 進口implicits作爲方法參數傳遞VS類的構造函數參數
- 30. 將構造函數參數傳遞給方法JAVA
向我們展示一個具體的例子,你問自己這樣一個問題。使用構造函數參數來初始化對象的狀態。使用方法參數將輸入傳遞給對象的特定方法。 –
這是一個通用設計問題。這意味着有點含糊,但我提供了適當的詳細程度。你不應該有代碼才能給出一個好的答案。設計發生在你編碼之前。 – programm3r
我們(好吧,我)需要一個具體的例子來弄清楚你在問什麼。只是給出一個解釋的問題包括語言障礙和人與你不在同一波長,這兩者都與[so]非常相關。 – Dukeling