Re: [問題] setXXX

看板java作者時間19年前 (2006/07/19 12:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串12/22 (看更多)
※ 引述《sioo.bbs@ptt.cc (加油加油)》之銘言: : ※ 引述《oishii (喔帥)》之銘言: : : 應該是針對封裝性來做考量 : : 一些instance variable在encapsulation的考量之下 應設為private : : 然後透過getXX()與setXXX()的method來做讀取與設定 : : 利用這樣的方式可以避免一些錯誤的產生 : : 比如說某一個instance variable必須為正數 : : 在setter的方法內就可以做這樣的寫入限制 : : 我也是初學者可能沒回答到你的問題 : : 因為我搞不大懂constructor跟參數設定的關係為何 : : 一般用new呼叫constructor產生一個instance之後應該就不會再呼叫建構子了 : : 如果你的意思是說 建構子內用setter的方式來做設定 : : 那裡由應該就是我上一段講的那樣 : : 還請高手指教 : 不好意思,可能是我沒問清楚吧,譬如像google search的api : GoogleSearch search = new GoogleSearch(); : search.setKey("000000000000000000000000"); : search.setQueryString("Internet standards"); : search.setSafeSearch(true); : GoogleSearchResult result = search.doSearch(); : 為什麼不乾脆寫一個建構子 GoogleSearch(key,query,isSafe) : 這樣不是比較快嗎?為什麼還要用setXXX()的方法 一方面是參數列過長的問題;另一方面是可讀性的問題 MySearch search = new MySearch("000000000000000000000000", "Internet standards", true); 這一段程式碼,就算是程式開發人員,看到建構子有兩個字串,和一個布林參數 腦子不先揪成一團,也會先變成兩個大... 誰知道第一個參數和第二個參數的意義是什麼呢... String key = "000000000000000000000000"; String queryString = "Internet standards"; Boolean safeSearch = true; MySearch search = new MySearch(key, queryString, safeSearch); 這一段程式碼看起來好多了,至少各個變數都已充分地描述自身的意義 但是這將延伸另一個可能的問題,每當追朔這些變數的時候 (key, queryString, ...) 總是無法和 search 聯想在一塊兒... 只有在看到第四行的時候,才發現:原來這些變數是要拿來建構 search 的啊! MySearch search = new MySearch(); search.setKey("000000000000000000000000"); search.setQueryString("Internet standards"); search.setSafeSearch(true); 這一段程式碼最能看出各個變數的關係和意義 "000000000000000000000000" 是要拿來給 search 當成 key 的 "Internet standards" 是要拿來給 search 當成 queryString 的 而 search 是 safe search 的 整個一目瞭然! 不只如此,在撰寫程式碼的時候 適當地使用 setter 和 getter 也能減少 debug 的時間 當一個 field 出現預期之外的問題時,標出那個 field 的所有 setter 和 getter 將能減少花在 "varible = ...;" 和 "... = varible;" 的時間 只要追朔這些 setter 和 getter 就可以了 -- 希望這些資訊能提供給您一些幫助 -- 〒作者:H45 來自:85-205.dorm.ncu.edu.tw ◎二進位的世界【140.115.50.50‧binary.csie.ncu.edu.tw】
文章代碼(AID): #14lRN500 (java)
討論串 (同標題文章)
文章代碼(AID): #14lRN500 (java)