日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Java開發人員必須掌握的11種干凈代碼最佳實踐

來源: 責編: 時間:2024-06-27 07:56:54 207觀看
導讀環境:Java171. Nulls and Optionals反例:從方法返回null可能會導致最可怕的NullPointerException或NPE。public String getValue() { // TODO return null ;}正例:使用Optional可以更明確地處理 null,避免出現此類錯誤

環境:Java17fmJ28資訊網——每日最新資訊28at.com

1. Nulls and Optionals

反例:從方法返回null可能會導致最可怕的NullPointerException或NPE。fmJ28資訊網——每日最新資訊28at.com

public String getValue() {  // TODO  return null ;}

正例:使用Optional可以更明確地處理 null,避免出現此類錯誤。fmJ28資訊網——每日最新資訊28at.com

public Optional<String> getValue() {  // TODO  return Optional.empty() ;}

2. 使用String.valueOf()優化字符串轉換

反例:使用 + 運算符進行字符串連接。fmJ28資訊網——每日最新資訊28at.com

double pi = 3.1415926 ;String str = "" + pi ;
  • 這里,"+"操作符用于字符串轉換,涉及隱式字符串連接
  • 這種方法可能效率低下,特別是在將大量變量轉換為字符串時

正例:使用內置方法進行字符串連接。fmJ28資訊網——每日最新資訊28at.com

double pi = 3.1415926 ;String str = String.valueOf(pi) ;
  • 在這里,我們使用 valueOf() 進行字符串轉換和連接
  • 該方法專門用于將其他數據類型轉換為字符串,并對性能進行了優化

3. 使用 Arrays.copyOf()復制數組

反例:手動復制數組fmJ28資訊網——每日最新資訊28at.com

int[] source = {1, 2, 3, 4, 5} ;int [] target = new int[source.length] ;for (int i = 0, len = source.length; i < len; i++) {  target[i] = source[i] ;}

這種方法效率較低,尤其是對于大數組,因為它需要進行多次迭代和元素賦值。fmJ28資訊網——每日最新資訊28at.com

正例:使用 Arrays.copyOf()復制數組fmJ28資訊網——每日最新資訊28at.com

int[] source = {1, 2, 3, 4, 5} ;int[] target = Arrays.copyOf(source, source.length) ;

4. 使用 isEmpty() 檢查空集合

反例:使用 length() 或 size() 檢查字符串或集合是否為空。fmJ28資訊網——每日最新資訊28at.com

String text = "Pack" ;if (text.length() == 0) {  // TODO}Set<String> datas = new HashSet<>() ;if (datas.size() == 0) {  // TODO}
  • 這里,length() 用于檢查字符串是否為空,size() 用于檢查集合是否為空
  • 這些方法雖然有效,但卻降低了代碼的可讀性

正例:使用 isEmpty() 檢查字符串或集合是否為空。fmJ28資訊網——每日最新資訊28at.com

String text = "Pack" ;if (text.isEmpty()) {  // TODO}Set<String> datas = new HashSet<>() ;if (datas.isEmpty()) {  // TODO}
  • isEmpty() 方法可用于字符串和集合,以檢查是否為空
  • 它的時間復雜度為 O(1),因此更高效、更易讀

5. 避免并發修改異常

反例:在遍歷列表時從列表中刪除元素會導致 ConcurrentModificationException 異常。fmJ28資訊網——每日最新資訊28at.com

List<String> datas = new ArrayList<>() ;datas.add("1") ;datas.add("2") ;datas.add("3") ;for (String s : datas) {  if ("1".equals(s)) {    datas.remove(s) ;  }}

輸出結果fmJ28資訊網——每日最新資訊28at.com

圖片圖片fmJ28資訊網——每日最新資訊28at.com

正例:使用迭代器的 remove 方法或 removeIf() 方法fmJ28資訊網——每日最新資訊28at.com

List<String> datas = new ArrayList<>() ;// add(x)Iterator<String> it = datas.iterator() ;while (it.hasNext()) {  String value = it.next() ;  if ("1".equals(value)) {    it.remove() ;   }}

你也可以使用 Java 8 中引入的 removeIf() 方法,根據給定條件刪除元素。fmJ28資訊網——每日最新資訊28at.com

List<String> datas = new ArrayList<>() ;// add(x)datas.removeIf(item -> "1".equals(item)) ;

該方法在內部使用迭代器并移除與條件匹配的元素。這是一種更簡潔、可讀性更強的方法。fmJ28資訊網——每日最新資訊28at.com

6. 預編譯正則表達式

反例:運行時編譯正則表達式fmJ28資訊網——每日最新資訊28at.com

String str = "Hello, World" ;if (str.matches("Hello.*")) {  System.out.println(true) ;}
  • 在這里,只要使用正則表達式,就會在運行時對其進行編譯
  • 重復使用相同的正則表達式會降低性能

正例:預編譯正則表達式fmJ28資訊網——每日最新資訊28at.com

private static final Pattern PATTERN1 = Pattern.compile("Hello.*") ; public void validateString() {  String str = "Hello, World" ;  if (PATTERN1.matcher(str).matches()) {    System.out.println(true) ;  }}

通過預編譯重復使用的正則表達式,并在需要時重復使用它,我們可以避免不必要的編譯,并提高性能。fmJ28資訊網——每日最新資訊28at.com

7. 避免在檢索前預先檢查數據是否存在

反例:先判斷是否存在然后在獲取數據fmJ28資訊網——每日最新資訊28at.com

public static void process(Map<String, String> params) {  if (params.containsKey("action")) {    String value = params.get("action") ;    // TODO  }}
  • 在這里,我們首先檢查Map中是否存在指定的key,然后再檢索它
  • 這種預先檢查是不必要的,因為如果未找到鍵,則 Map的 get 方法會返回 null

正例:直接獲取值判斷是否nullfmJ28資訊網——每日最新資訊28at.com

String action = params.get("action") ;if (action != null) {  // TODO}

這種方法避免了多余的檢查,使代碼更簡潔、更高效。fmJ28資訊網——每日最新資訊28at.com

8. 將集合高效轉換為數組

反例:fmJ28資訊網——每日最新資訊28at.com

List<String> datas = new ArrayList<>() ;datas.add("1") ;datas.add("2") ;datas.add("3") ;String[] ret = datas.toArray(new String[datas.size()]) ;

在這種方法中,首先計算列表的大小,然后創建一個新數組。這可能會影響性能,尤其是對于大數據集。fmJ28資訊網——每日最新資訊28at.com

正例:fmJ28資訊網——每日最新資訊28at.com

List<String> datas = new ArrayList<>() ;// add(x)String[] ret = datas.toArray(new String[0]) ;

在這里,調用 toArray 時使用的是空數組(new String[0]),這種方法避免了計算列表大小的需要,并允許 toArray 方法在內部處理數組大小的調整,從而獲得更好的性能和更簡潔的代碼。fmJ28資訊網——每日最新資訊28at.com

9. 合理使用默認方法

反例:fmJ28資訊網——每日最新資訊28at.com

public interface Logger {  void log(String message) ;}public class FileLogger implements Logger {  public void log(String message) {    // TODO  }}public class ConsoleLogger implements Logger {  public void log(String message) {    // TODO  }}

如果需要在接口中添加 logError 等新方法,則必須修改所有實現類,這可能會導致代碼維護問題和潛在錯誤。fmJ28資訊網——每日最新資訊28at.com

正例:fmJ28資訊網——每日最新資訊28at.com

public interface Logger {  void log(String message) ;  default void logError(String error) {    // TODO  }}

在這里,Logger接口定義了一個默認方法(logError),它提供了記錄錯誤的默認實現。這樣實現類無需修改即可自動繼承該默認實現。fmJ28資訊網——每日最新資訊28at.com

10. 使用Date/Time API

反例:使用傳統的Date類fmJ28資訊網——每日最新資訊28at.com

Date birthday = new Date() ;// TODO

這個類有很多問題,比如可變性和方法不夠清晰;該類中的大部分方法,如 getYear()、getMonth() 和 getDay() 已被棄用。fmJ28資訊網——每日最新資訊28at.com

正例:使用Date/Time API(Java 8 及以后版本)中的類fmJ28資訊網——每日最新資訊28at.com

LocalDate date = LocalDate.now() ;LocalDateTime dateTime = LocalDateTime.now() ;// TODO

在這里,使用來自Date/Time API的LocalDate、LocalDateTime類;這兩個類是不可變的,確保了線程的安全性,并為日期操作提供了清晰直觀的方法。fmJ28資訊網——每日最新資訊28at.com

11. 未使用泛型

反例:fmJ28資訊網——每日最新資訊28at.com

List datas = new ArrayList() ;datas.add(10) ;datas.add("Hello") ;

不同的數據類型混雜在列表中,可能導致運行時出錯。fmJ28資訊網——每日最新資訊28at.com

正例:使用泛型可以確保類型安全,避免此類問題fmJ28資訊網——每日最新資訊28at.com

List<Integer> datas = new ArrayList<>() ;datas.add(10) ;// 錯誤// datas.add("Hello"

fmJ28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-96757-0.htmlJava開發人員必須掌握的11種干凈代碼最佳實踐

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 面試官問到分布式事務?這樣回答就對了!

下一篇: 避免消息積壓的終極指南:四個關鍵技巧

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品入口麻豆原神| 欧美日韩国产高清视频| 中文精品99久久国产香蕉| 亚洲特色特黄| 欧美自拍丝袜亚洲| 媚黑女一区二区| 欧美日韩精品伦理作品在线免费观看| 国产精品久久99| 一区二区三区在线视频观看| 亚洲免费观看高清完整版在线观看熊| 亚洲自拍电影| 六月天综合网| 欧美午夜激情视频| 国产一区二区三区在线播放免费观看| 亚洲高清免费在线| 亚洲视频狠狠| 久久久人人人| 国产精品福利片| 好吊妞这里只有精品| 亚洲剧情一区二区| 欧美一二三区精品| 欧美剧在线观看| 国产一区二区三区免费在线观看| 亚洲毛片在线| 久久久久久久一区二区| 欧美日韩综合不卡| 在线成人免费视频| 中国亚洲黄色| 免费91麻豆精品国产自产在线观看| 欧美日韩视频| 狠狠干综合网| 亚洲欧美一区二区三区极速播放 | 免费不卡中文字幕视频| 国产精品成人国产乱一区| 在线播放精品| 午夜日韩在线| 欧美日韩中文在线| 亚洲国产精品va在线看黑人| 亚洲女与黑人做爰| 欧美激情视频一区二区三区在线播放 | 国产在线视频欧美| 一区二区三区国产精品| 麻豆成人在线观看| 国产日韩欧美在线| 亚洲天堂av高清| 欧美成人影音| 激情综合视频| 午夜精品在线| 欧美视频免费在线观看| 亚洲精品1234| 久久视频在线免费观看| 国产精品天天摸av网| 日韩亚洲欧美高清| 米奇777超碰欧美日韩亚洲| 国产日韩欧美综合| 亚洲免费视频成人| 欧美日韩国产一区二区| 亚洲国产精品美女| 久久亚洲国产精品日日av夜夜| 国产欧美日韩一区二区三区| 中文av字幕一区| 欧美日韩国产首页| 亚洲精品一区二区三区不| 免费视频一区| 在线观看成人小视频| 欧美一区亚洲| 国产精品综合视频| 香蕉久久夜色精品| 国产精品午夜国产小视频| 亚洲无毛电影| 国产精品mm| 亚洲无限乱码一二三四麻| 欧美日韩一区二区高清| 日韩图片一区| 欧美日本中文字幕| 日韩亚洲欧美一区| 欧美日韩高清在线观看| 亚洲美女av在线播放| 欧美另类极品videosbest最新版本| 91久久久亚洲精品| 欧美成人蜜桃| 亚洲伦理网站| 欧美日韩午夜| 亚洲无线一线二线三线区别av| 国产精品av久久久久久麻豆网| 一区二区三区高清在线观看| 欧美日韩亚洲天堂| 亚洲视频中文| 国产精品视频yy9099| 亚洲欧洲av一区二区| 国产欧美日韩免费看aⅴ视频| 久久se精品一区二区| 狠狠狠色丁香婷婷综合激情| 久久综合狠狠综合久久综合88| 亚洲大片在线| 欧美华人在线视频| 一区二区黄色| 国产精品天美传媒入口| 欧美一区二区三区免费观看| 国产日韩综合| 麻豆国产精品一区二区三区 | 亚洲电影av在线| 欧美精品日韩综合在线| 在线视频欧美精品| 国产精品亚洲激情| 久久aⅴ国产欧美74aaa| 伊大人香蕉综合8在线视| 欧美a级在线| 一区二区日韩欧美| 国产精品视频观看| 久久亚洲美女| 99精品欧美| 国产欧美一区二区精品仙草咪 | 欧美国产先锋| 亚洲一区二区三区久久| 国产精品久久久久久久久果冻传媒| 欧美一级艳片视频免费观看| 在线观看久久av| 欧美日韩不卡在线| 香蕉成人啪国产精品视频综合网| 在线观看成人一级片| 欧美日本一区二区三区 | 欧美激情视频一区二区三区免费| 亚洲午夜小视频| 国内视频精品| 欧美日韩国产区一| 欧美综合国产| 99精品国产高清一区二区| 国产日韩欧美a| 欧美激情精品久久久久久免费印度| 亚洲一区二区视频在线观看| 激情久久久久久久| 欧美午夜精品伦理| 久久手机免费观看| 亚洲午夜小视频| 在线电影欧美日韩一区二区私密| 欧美日韩成人在线视频| 久久不射中文字幕| 一区二区欧美在线观看| 国内久久视频| 国产精品大片免费观看| 六月天综合网| 性色一区二区| 99riav1国产精品视频| 国模套图日韩精品一区二区| 欧美日韩国产成人精品| 久久久久国产一区二区三区四区| 日韩亚洲欧美成人| 激情综合久久| 国产精品久久一卡二卡| 欧美成人中文字幕在线| 性色av一区二区三区红粉影视| 91久久线看在观草草青青| 国产精品日本精品| 欧美精品一区二区视频| 久久久久国产一区二区| 亚洲社区在线观看| 亚洲黄色小视频| 国产一区二区三区久久久| 欧美午夜宅男影院在线观看| 免费日韩av片| 久久久成人网| 小嫩嫩精品导航| 亚洲天堂成人| 亚洲美女黄网| 在线观看一区| 国产一区深夜福利| 国产精品盗摄久久久| 欧美激情二区三区| 麻豆精品在线视频| 久久精精品视频| 小黄鸭精品密入口导航| 一区二区成人精品 | 国产亚洲精品一区二区| 国产精品久久7| 欧美日韩成人综合天天影院| 免费视频一区二区三区在线观看| 久久精品官网| 欧美一区在线直播| 午夜精品久久久久99热蜜桃导演| 一区二区激情| 国产精品高清在线观看| 在线日本成人| 久久精品成人欧美大片古装| 99精品免费| 国产亚洲欧洲一区高清在线观看| 欧美激情国产日韩精品一区18| 亚洲伦理在线观看| 国产精品美女黄网| 亚洲永久精品国产| 国产精品高潮粉嫩av| …久久精品99久久香蕉国产| 久久九九国产| 亚洲精品久久嫩草网站秘色| 国产片一区二区| 欧美日韩国产精品自在自线| 久久久亚洲综合| 亚洲欧美日韩在线观看a三区| 亚洲国产日韩在线| 国产精品视频久久久| 欧美午夜精品理论片a级大开眼界| 欧美18av| 亚洲视频在线观看网站| 欧美日韩一区二区欧美激情|