看板java
标 题Re: [问题] setXXX
发信站中大资工二进位的世界 (Wed Jul 19 12:22:53 2006)
转信站ptt!ctu-reader!ctu-gate!news.nctu!news.ncu!news.csie.ncu!BinaryBBS
※ 引述《[email protected] (加油加油)》之铭言:
: ※ 引述《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】