1. 主页 > 小妙招

Java类成员变量操作方法:getter setter与最佳实践,封装的艺术,新手避坑指南


鍝庡摕鍠傦紒鍚浣犲垰瀛ava灏辫鍚勭getAge()銆乻etName()缁曟檿浜嗭紵鏄庢槑鐩存帴缁欏彉閲忚祴鍊煎鐥涘揩锛屼负鍟ラ潪瑕佹暣杩欎簺鑺遍噷鑳″摠鐨勬柟娉曪紵浠婂ぉ鍜变滑灏卞敔鏄庣櫧杩欎簨鍎匡紝淇濆噯浣犲惉瀹屾媿澶ц吙锛?鍘熸潵杩欎箞鍥炰簨锛?


涓€銆佷负鍟ヨ鎼瀏etter/setter锛熺洿鎺ユ搷浣滃彉閲忎笉棣欏悧锛?/h3>

涓句釜鏍楀瓙馃尠锛氫綘瀹朵繚闄╂煖鐨勯噾鏉¤兘闅忎究璁╀汉鎷垮悧锛熻偗瀹氬緱閰嶉挜鍖欏鍚э紵鈥?strong>鈥嬫垚鍛樺彉閲忓氨鏄綘鐨勯噾鏉♀€?/strong>鈥嬶紝getter/setter灏辨槸淇濋櫓鏌滅殑閽ュ寵绯荤粺銆?/p>

鈥?strong>鈥嬬洿鎺ublic鍙橀噺鐨勪笁澶ф绌粹€?/strong>鈥嬶細

  1. 鏁版嵁瑁稿锛氶殧澹佽€佺帇鑳介殢渚挎敼浣犵殑璐︽埛浣欓锛堝嵄闄╂寚鏁扳瓙猸愨瓙猸愨瓙锛?/li>
  2. 淇敼澶辨帶锛氬摢澶╂兂缁欓噾棰濆姞涓皬鏁扮偣鏍¢獙锛屽緱缈婚亶鎵€鏈変唬鐮?/li>
  3. 璋冭瘯鍥伴毦锛氶鐭ラ亾鏄摢涓簩鎰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>鈥嬶細

  1. 蹇樿澶勭悊null鍊硷紙姣斿瀛楃涓插彉閲忥級
  2. 杩斿洖鍙彉瀵硅薄寮曠敤锛堟瘮濡傞泦鍚堢洿鎺eturn锛?/li>
  3. 鎶妔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>鈥嬶紒

鐜板湪鎴戠殑涔犳儻鏄細

  1. 鍦↖DEA瑁匞enerateAllSetter鎻掍欢锛堟墜鍐欏お绱級
  2. 鎵€鏈塻etter寮€澶村厛鍋氬弬鏁版牎楠?/li>
  3. 杩斿洖闆嗗悎/鏁扮粍蹇呯敤闃插尽鎬ф嫹璐?/li>
  4. 甯冨皵绫诲瀷getter鐢╥s寮€澶达紙姣斿isVIP()锛?/li>

璇村埌搴曪紝getter/setter灏卞儚浜ら€氳鍒欌€斺€斿钩鏃惰寰楃孩缁跨伅鐑︼紝鐪熷嚭浜嬩簡鎵嶇煡閬撳畠鐨勫ソ銆傝浣忚€佸徃鏈虹殑璇濓細鈥?strong>鈥嬩唬鐮佸崈涓囪锛屽畨鍏ㄧ涓€鏉★紱灏佽涓嶈鑼冿紝杩愮淮涓よ娉€?/strong>鈥嬶紒

锛堝畬锛?/p>

本文由嘻道妙招独家原创,未经允许,严禁转载