我看到我們可以用setter封裝實例變量,然而,構造函數似乎做同樣的事情。何時使用Setters以及何時使用Constructors來設置變量值?
Class object1 = new Class(100, 100) // setting using Constructor
object1.setValue(100, 100) // setting using Setters
什麼時候應該使用setter,何時應該使用構造函數來初始化實例變量值?
我看到我們可以用setter封裝實例變量,然而,構造函數似乎做同樣的事情。何時使用Setters以及何時使用Constructors來設置變量值?
Class object1 = new Class(100, 100) // setting using Constructor
object1.setValue(100, 100) // setting using Setters
什麼時候應該使用setter,何時應該使用構造函數來初始化實例變量值?
時使用的值是需要的對象變得有意義,或者當你需要在一次一致性或便於提供多個值的構造函數;例如,長方形必須有具有長度和寬度。
Rectangle r = new Rectangle(10, 20);
提供製定者當你有在創建對象之後,可以改變可選值(如顏色),或者值:
r.setColor(Color.BLUE);
注意,這是通常優選以創建不可改變「值對象「只要有可能,因爲這些消除了幾種潛在的錯誤。值對象必須一次性全部初始化,但他們也經常有返回一個新的,類似的對象方法:
當你創建了一個對象的第一個實例r = r.withLength(15);
謝謝Chrylis!那正是我期待的! – Togusa
讓我把它與現實生活scenerio。
我是XXX組織的開發者,使用YYY品牌的電腦。
在Java中,這對應於4個類,類YYY,類XXX,類Developer,類Computer。
我希望這會幫助你。
還有一個類似的問題在這裏:http://stackoverflow.com/questions/7779509/setter-di-vs-constructor-di-in-spring –
這是一個意見的問題;這裏是我的:儘可能使用構造函數來減少代碼,但我不建議通過setter設置多個值。 – ChiefTwoPencils
一個可能的時間更傾向於另一個:[BeanShell](http://www.beanshell.org/)或任何其他期望[bean]的框架(https://en.wikipedia.org/wiki/JavaBeans )。 –