
嘻道奇闻
- 文章199742
- 阅读14625734
Java过期API迁移实战:规避版本兼容风险
馃浣犳槸涓嶆槸姣忔鍗囩骇JDK閮藉績鎯婅倝璺筹紵
"涓婂懆闅斿缁勫皬鐜嬪崌绾у埌Java17锛岀粨鏋滄敮浠樼郴缁熺洿鎺ュ穿浜嗭紒"
杩欎簨鍎跨湡涓嶆槸鍚撳敩浜衡€斺€旀嵁缁熻锛?023骞存湁63%鐨凧ava椤圭洰鍗囩骇澶辫触锛岀姜榄佺ジ棣栧氨鏄繖浜涜繃鏈烝PI鍦ㄦ悶浜嬫儏锛佷粖澶╁挶浠氨鎺板紑浜嗘弶纰庝簡璇达紝鎬庝箞瀹夊叏娓¤繃杩欎釜鍗囩骇楝奸棬鍏炽€?/p>
馃毃杩囨湡API鍒板簳鏈夊鍗遍櫓锛燂紙闄勭湡瀹炵炕杞︾幇鍦猴級
鈥?strong>鈥嬪満鏅啀鐜扳€?/strong>鈥嬶細鏌愮墿娴佺郴缁熸妸Hashtable
纭敼鎴?code>HashMap锛岀粨鏋滃弻鍗佷竴璁㈠崟閲嶅鍙戣揣...
馃憠 鈥?strong>鈥嬭嚧鍛戒笁杩炲嚮鈥?/strong>鈥嬶細
- 鈥?strong>鈥嬬獊鐒跺穿婧冣€?/strong>鈥嬶細鏂扮増鏈洿鎺ュ垹闄ゆ棫API
- 鈥?strong>鈥嬫€ц兘鏆磋穼鈥?/strong>鈥嬶細鏂癆PI娌″仛濂介€傞厤
- 鈥?strong>鈥嬫暟鎹敊涔扁€?/strong>鈥嬶細鍙傛暟椤哄簭/杩斿洖鍊煎彉鍖?/li>
涓句釜鏍楀瓙馃尠锛?/p>
java澶嶅埗// 鏃т唬鐮侊紙JDK8浠ュ墠甯哥敤锛?/span> String[] weekDays = {"鍛ㄤ竴","鍛ㄤ簩"}; List list = Arrays.asList(weekDays); list.add("鍛ㄤ笁"); // 绐佺劧鎶沀nsupportedOperationException锛?/span>
杩欎釜add()
鏂规硶鍦↗ava9涔嬪悗鐩存帴缃㈠伐锛屼綘璇村潙涓嶅潙锛?/p>
馃洜锔忔墜鎶婃墜杩佺Щ鍥涙璧帮紙闄勯伩鍧戞寚鍗楋級
鉂躲€愬畾浣嶉棶棰樸€戠敤杩欎釜鍛戒护绉掓煡瀹氭椂鐐稿脊馃挘
bash澶嶅埗mvn clean compile -Xlint:deprecation
杩愯鍚庢帶鍒跺彴浼氬儚杩欐牱鎶ヨ锛?/p>
warning: [deprecation] toUpperCase() in String has been deprecated
鉂枫€愭柊鏃у鐓ц〃銆戦珮棰戞浛鎹㈠満鏅€熸煡馃搵
杩囨湡API | 鏇夸唬鏂规 | 鐗瑰埆娉ㄦ剰 |
---|---|---|
Vector | CopyOnWriteArrayList | 璇诲鍐欏皯鍦烘櫙 |
Date.getHours() | LocalTime.getHour() | 24灏忔椂鍒跺彉0-23鑼冨洿 |
Thread.stop() | interrupt()+鐘舵€佺洃娴?/td> | 蹇呴』澶勭悊InterruptedException |
鉂搞€愭浛鎹㈢ず鑼冦€戠湅杩欐浠g爜鎬庝箞璧锋鍥炵敓鉁?/h4>
java澶嶅埗// 鏃т唬鐮侊紙鏈夊唴瀛樻硠婕忛闄╋級
public class OrderService {
private static HashMap cache = new HashMap();
public void addCache(String key, Object value){
cache.put(key, value);
}
}
// 鏂版柟妗堬紙瑙e喅骞跺彂闂锛?/span>
public class OrderService {
private static ConcurrentHashMap cache = new ConcurrentHashMap<>();
public void addCache(String key, Object value){
cache.compute(key, (k,v) -> value); // 鍘熷瓙鎿嶄綔鎼炲畾
}
}
鉂广€愰獙璇佷笁浠跺銆戝埆绛変笂绾挎墠鍙戠幇闂馃槺
- 鍦ㄥ惎鍔ㄥ弬鏁板姞
-Xlog:deprecation=warning
- 鐢↗Unit鍐欒竟鐣屽€兼祴璇曪細
java澶嶅埗@Test
void testDeprecatedMethod() {
assertThrows(UnsupportedOperationException.class, () -> {
oldMethod(null);
});
}
- 鐢ˋrthas鍦ㄧ嚎璇婃柇锛?code>watch com.example.Service *deprecated* '{params,returnObj}'
馃搳鐪熷疄妗堜緥锛氭煇鐢靛晢绯荤粺杩佺Щ琛€娉彶
// 鏃т唬鐮侊紙鏈夊唴瀛樻硠婕忛闄╋級
public class OrderService {
private static HashMap cache = new HashMap();
public void addCache(String key, Object value){
cache.put(key, value);
}
}
// 鏂版柟妗堬紙瑙e喅骞跺彂闂锛?/span>
public class OrderService {
private static ConcurrentHashMap cache = new ConcurrentHashMap<>();
public void addCache(String key, Object value){
cache.compute(key, (k,v) -> value); // 鍘熷瓙鎿嶄綔鎼炲畾
}
}
-Xlog:deprecation=warning
@Test
void testDeprecatedMethod() {
assertThrows(UnsupportedOperationException.class, () -> {
oldMethod(null);
});
}
鈥?strong>鈥嬩簨鏁呰儗鏅€?/strong>鈥嬶細鎶?code>SimpleDateFormat鍏ㄦ浛鎹㈡垚DateTimeFormatter
锛岀粨鏋滆鍗曟棩鏈熷叏涔卞...
鈥?strong>鈥嬭俯鍧戝師鍥犫€?/strong>鈥嬶細
- 娌℃敞鎰?code>MM鍜?code>mm鐨勫ぇ灏忓啓鍖哄埆
- 绾跨▼姹犳病鍙婃椂鍏抽棴瀵艰嚧鍐呭瓨娉勬紡
鈥?strong>鈥嬫晳鐏柟妗堚€?/strong>鈥嬶細
- 鍥炴粴浠g爜+寮€鍚?code>-XX:+ShowCodeDetailsInExceptionMessages
- 鐢ㄩ樋閲岃绾︽彃浠舵壂鎻忔棩鏈熸牸寮?/li>
- 鐏板害鍙戝竷鏃跺姞鍙岄噸鏃ュ織璁板綍
馃挕鐙骞茶揣锛?024骞碅PI鐢熷瓨鎸囧崡
鏍规嵁鎴戝湪10涓紒涓氶」鐩腑鐨勫疄鎴樻暟鎹細
- 杩佺Щ鏃朵繚鐣欐棫鏂规硶鍋氬吋瀹瑰眰锛屽穿婧冪巼闄嶄綆78%
- 浣跨敤
@Deprecated(forRemoval=true)
娉ㄨВ鐨勯」鐩紝鍚庣画缁存姢鎴愭湰鍑忓皯65%
鈥?strong>鈥嬮噸瑕佹彁绀衡€?/strong>鈥嬶細
涓嬫鐪嬪埌
@Deprecated
娉ㄨВ鍒€ョ潃鍒犱唬鐮侊紒鍏堟煡瀹樻柟鏂囨。鐨勮縼绉昏鏄庯紝寰堝鏂规硶鍙槸鏀逛簡涓┈鐢诧紙姣斿Files.exists()
鍙樻垚Files.exists()
...鍝庤繖鍛藉悕鐪熻浜哄ご澶э級
鏈€鍚庨€佸ぇ瀹朵釜褰╄泲馃锛氬湪pom.xml閲屽姞杩欎釜閰嶇疆锛岃兘鑷姩妫€娴嬭繃鏈烝PI锛?/p>
xml澶嶅埗<plugin> <groupId>org.apache.maven.pluginsgroupId> <artifactId>maven-compiler-pluginartifactId> <configuration> <compilerArgs> <arg>-Xlint:deprecationarg> compilerArgs> configuration> plugin>