Java类成员变量操作方法:getter setter与最佳实践,封装的艺术,新手避坑指南
鍝庡摕鍠傦紒鍚浣犲垰瀛ava灏辫鍚勭getAge()銆乻etName()缁曟檿浜嗭紵鏄庢槑鐩存帴缁欏彉閲忚祴鍊煎鐥涘揩锛屼负鍟ラ潪瑕佹暣杩欎簺鑺遍噷鑳″摠鐨勬柟娉曪紵浠婂ぉ鍜变滑灏卞敔鏄庣櫧杩欎簨鍎匡紝淇濆噯浣犲惉瀹屾媿澶ц吙锛?鍘熸潵杩欎箞鍥炰簨锛?
涓€銆佷负鍟ヨ鎼瀏etter/setter锛熺洿鎺ユ搷浣滃彉閲忎笉棣欏悧锛?/h3>
涓句釜鏍楀瓙馃尠锛氫綘瀹朵繚闄╂煖鐨勯噾鏉¤兘闅忎究璁╀汉鎷垮悧锛熻偗瀹氬緱閰嶉挜鍖欏鍚э紵鈥?strong>鈥嬫垚鍛樺彉閲忓氨鏄綘鐨勯噾鏉♀€?/strong>鈥嬶紝getter/setter灏辨槸淇濋櫓鏌滅殑閽ュ寵绯荤粺銆?/p>
鈥?strong>鈥嬬洿鎺ublic鍙橀噺鐨勪笁澶ф绌粹€?/strong>鈥嬶細
- 鏁版嵁瑁稿锛氶殧澹佽€佺帇鑳介殢渚挎敼浣犵殑璐︽埛浣欓锛堝嵄闄╂寚鏁扳瓙猸愨瓙猸愨瓙锛?/li>
- 淇敼澶辨帶锛氬摢澶╂兂缁欓噾棰濆姞涓皬鏁扮偣鏍¢獙锛屽緱缈婚亶鎵€鏈変唬鐮?/li>
- 璋冭瘯鍥伴毦锛氶鐭ラ亾鏄摢涓簩鎰e瓙鎶婂勾榫勬敼鎴?18宀佺殑
鑰岀敤getter/setter灏卞儚缁欏彉閲忚浜嗕繚闀栵細
java澶嶅埗private int age; // 鎶婂彉閲忚棌璧锋潵 public void setAge(int newAge) { if(newAge > 0 && newAge < 150) { // 淇濆畨涓婂矖锛?/span> this.age = newAge; } else { System.out.println("浣犲綋鎴戞槸鍚歌楝煎晩锛?); } }
浜屻€乬etter/setter鐨勬纭墦寮€濮垮娍锛堥檮閫侀伩鍧戠绫嶏級
鈥?strong>鈥嬫柊鎵嬪父瑙佺炕杞︾幇鍦衡€?/strong>鈥嬶細
- 蹇樿澶勭悊null鍊硷紙姣斿瀛楃涓插彉閲忥級
- 杩斿洖鍙彉瀵硅薄寮曠敤锛堟瘮濡傞泦鍚堢洿鎺eturn锛?/li>
- 鎶妔etter褰撴瀯閫犲嚱鏁扮敤锛堣繖涓悗闈㈢粏璇达級
鈥?strong>鈥嬫纭啓娉曟ā鏉库€?/strong>鈥嬶細
java澶嶅埗// 瀹夊叏鍗囩骇鐗坰etter public void setName(String name) { this.name = (name != null) ? name.trim() : "鍖垮悕鐢ㄦ埛"; // 闃插尽鎬у鐞?/span> } // 瀹夊叏鐗坓etter锛堣繑鍥為泦鍚堟椂锛?/span> public List
getHobbies() { return new ArrayList<>(hobbies); // 杩斿洖鍓湰闃茬鏀?/span> }
鈥?strong>鈥嬬伒榄傛嫹闂€?/strong>鈥嬶細姣忎釜鍙橀噺閮借鍐檊etter/setter鍚楋紵
鎴戠殑瑙傜偣鏄細80%鐨勬儏鍐甸渶瑕侊紒浣嗗儚甯搁噺锛坰tatic final锛夋垨鑰呭唴閮ㄥ伐鍏风被锛屽彲浠ラ€傚綋鍋锋噿銆備綘鍝侊紝浣犵粏鍝併€?/p>
涓夈€侀珮绾х帺娉曪細杩欎簺楠氭搷浣滆浣犵殑浠g爜鏇翠笓涓?/h3>
鈥?strong>鈥嬪満鏅?锛氬欢杩熷垵濮嬪寲锛堢渷鍐呭瓨绁炲櫒锛夆€?/strong>鈥?/p>
java澶嶅埗private BigDataReport report; // 鍋囪杩欐槸涓緢鍗犲唴瀛樼殑瀵硅薄 public BigDataReport getReport() { if(report == null) { report = new BigDataReport(); // 鐢ㄧ殑鏃跺€欐墠鍒涘缓 } return report; }
鈥?strong>鈥嬪満鏅?锛氬彧璇?鍙啓鎺у埗鈥?/strong>鈥?/p>
java澶嶅埗// 鍙瀵嗙爜锛坰etter涓嶆彁渚涳級 private String password; public String getPassword() { return "********"; // 杩炶嚜宸遍兘涓嶇粰鐪嬬湡瀹炲瘑鐮?/span> } // 鍙啓鏃ュ織锛堜笉闇€瑕乬etter锛?/span> public void writeLog(String content) { this.logContent = content; }
鈥?strong>鈥嬪満鏅?锛氱洃鍚櫒妯″紡锛堢帺鍑鸿姳锛夆€?/strong>鈥?/p>
java澶嶅埗public void setPrice(double price) { double oldPrice = this.price; this.price = price; // 浠锋牸鍙樺寲鏃惰嚜鍔ㄩ€氱煡瑙傚療鑰?/span> notifyPriceChange(oldPrice, price); }
鍥涖€佺粓鏋佸鍐筹細鐩存帴璁块棶 vs getter/setter 鎬ц兘瀵规瘮
瀵规瘮椤?/th> | 鐩存帴璁块棶 | getter/setter |
---|---|---|
鎵ц閫熷害 | 鈿″揩锛堢撼绉掔骇锛?/td> | 鈴崇◢鎱紙澶?-2鏉℃寚浠わ級 |
浠g爜鍙淮鎶ゆ€?/td> | 馃う鈾傦笍宸?/td> | 馃憤浼樼 |
鎵╁睍鎬?/td> | 馃毇鍍电‖ | 馃挕鐏垫椿 |
瀹夊叏鎬?/td> | 馃幆鍗遍櫓 | 馃洝锔忓畨鍏?/td> |
鈥?strong>鈥嬬湡鐩告椂鍒烩€?/strong>鈥嬶細鐜颁唬JVM浼氬绠€鍗昰etter/setter鍋氬唴鑱斾紭鍖栵紝瀹為檯鎬ц兘鎹熻€楀嚑涔庡彲浠ュ拷鐣ヤ笉璁★紒閭d簺鍤峰毞"鐢╣etter褰卞搷鎬ц兘"鐨勶紝澶氬崐鏄崄骞村墠鐨勮€侀粍鍘嗕簡銆?/p>
浜斻€佷釜浜鸿娉暀璁細杩欎簺骞存垜韪╄繃鐨勫潙
鍒氬叆琛岄偅浼氬効锛屾垜涔熻寰楀啓getter/setter绾睘鑴辫¥瀛愭斁灞併€傜洿鍒版湁娆$嚎涓婁簨鏁呪€斺€旀湁涓啫鎲ㄥ悓浜嬬洿鎺ョ粰璁㈠崟閲戦璧嬩簡璐熸暟锛屽寰楀叕鍙稿€掕创閽便€備粠閭d互鍚庢垜鎮熶簡锛氣€?strong>鈥嬪皝瑁呬笉鏄閫硷紝鏄繚鍛解€?/strong>鈥嬶紒
鐜板湪鎴戠殑涔犳儻鏄細
- 鍦↖DEA瑁匞enerateAllSetter鎻掍欢锛堟墜鍐欏お绱級
- 鎵€鏈塻etter寮€澶村厛鍋氬弬鏁版牎楠?/li>
- 杩斿洖闆嗗悎/鏁扮粍蹇呯敤闃插尽鎬ф嫹璐?/li>
- 甯冨皵绫诲瀷getter鐢╥s寮€澶达紙姣斿isVIP()锛?/li>
璇村埌搴曪紝getter/setter灏卞儚浜ら€氳鍒欌€斺€斿钩鏃惰寰楃孩缁跨伅鐑︼紝鐪熷嚭浜嬩簡鎵嶇煡閬撳畠鐨勫ソ銆傝浣忚€佸徃鏈虹殑璇濓細鈥?strong>鈥嬩唬鐮佸崈涓囪锛屽畨鍏ㄧ涓€鏉★紱灏佽涓嶈鑼冿紝杩愮淮涓よ娉€?/strong>鈥嬶紒
锛堝畬锛?/p>
本文由嘻道妙招独家原创,未经允许,严禁转载