最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java如何有效避免空指針

 更新時間:2023年12月17日 11:39:53   作者:shigen01  
空指針,也就是NullPointerException 簡稱NPE的,怕一下子寫出NPE,部分的伙伴看不懂,索性就改成了空指針,在實際的開發(fā)中,我們最討厭的就是遇到空指針了,業(yè)務(wù)跑著跑著發(fā)現(xiàn)了空指針,所以本文詳細(xì)介紹了Java如何有效的避免空指針,需要的朋友可以參考下

其實在阿里巴巴的《Java開發(fā)手冊》里邊,空指針,也就是NullPointerException 簡稱NPE的,怕一下子寫出NPE,部分的伙伴看不懂,索性就改成了空指針。下文的空指針異常,我們用NPE表示。

在實際的開發(fā)中,我們最討厭的就是遇到空指針了,業(yè)務(wù)跑著跑著發(fā)現(xiàn)了空指針。通過shigen的總結(jié),多數(shù)的空指針都是從數(shù)據(jù)庫中帶來的,在這篇文章中,shigen就有講到盡可能用not null定義字段

但是,所有的這些都是理想的狀態(tài),并不是每個人或者每個開發(fā)團(tuán)隊都會遵守這個規(guī)約的。遇到這樣的項目,我們除了去改也沒有辦法。除了用java8的新特性Option外,shigen也寫了一個工具類,實現(xiàn)了空指針的控制問題。那就先來看看代碼吧。

 public class ObjectUtil {
 ?
     /**
      * 把對象中的 String 類型的null字段,轉(zhuǎn)換為空字符串
      *
      * @param <T>       待轉(zhuǎn)化對象類型
      * @param object    待轉(zhuǎn)化對象
      * @param fieldName 字段名字
      */
     public static <T> void noNullStringAttr(T object, String fieldName) {
         Field[] fields = object.getClass().getDeclaredFields();
         if (fields.length == 0) {
             return;
         }
         for (Field field : fields) {
             if ("String".equals(field.getType().getSimpleName())) {
                 field.setAccessible(true);
                 try {
                     Object value = field.get(object);
                     if (value == null && field.getName().equals(fieldName)) {
                         field.set(object, "");
                     }
                 } catch (IllegalArgumentException | IllegalAccessException e) {
                     e.printStackTrace();
                 }
             }
         }
     }
 }

這個代碼其實就是用到了范型,我們傳入對應(yīng)的對象和對象的屬性名字,通過反射獲得字段的值,如果字段的值是空的,就讓字段的值設(shè)置成空字符串,而不是null。這樣,我們在使用的時候就會很好的避免到空指針的問題。

當(dāng)然,我們的方法也可以稍微改造一下,直接把字段值為空的字段設(shè)置成默認(rèn)值或者其它值,這個都是可以進(jìn)一步的優(yōu)化的。還是那句話:具體問題具體分析。

那使用起來也很簡單,先看我怎么使用的吧。

     public static void main(String[] args) {
         // 構(gòu)造參數(shù):status, msg, data
         Result<Object> result = new Result<>(200, null, null);
         ObjectUtil.noNullStringAttr(result, "msg");
         System.out.println(result);
 ?
         User user = new User().setUsername("abc").setPassword(null);
         ObjectUtil.noNullStringAttr(user, "password");
         System.out.println(user);
 ?
         ObjectUtil.noNullStringAttr(user, "username");
         System.out.println(user);
     }

輸出是這樣的:

如果有值,我們就不管,沒有值,就把字段的值設(shè)置成空字符串。

當(dāng)然,用反射的方式也會破壞對象的結(jié)構(gòu),造成性能的損耗。哎,只是一個補救的辦法,還是能規(guī)范就規(guī)范起來,這樣才能解決很多不必要的麻煩。

以上就是詳解Java如何有效避免空指針的詳細(xì)內(nèi)容,更多關(guān)于Java避免空指針的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot集成Redis之RedisTemplate實踐

    SpringBoot集成Redis之RedisTemplate實踐

    文章介紹了在使用SpringBoot與Redis進(jìn)行交互時,遇到的中文亂碼問題,并提供兩種解決方法:1) 使用StringRedisTemplate;2) 自定義Redis序列化器,同時,還討論了在集群模式下,若主機(jī)宕機(jī),客戶端如何動態(tài)感知集群狀態(tài)
    2026-04-04
  • java 解析由String類型拼接的XML文件方法

    java 解析由String類型拼接的XML文件方法

    今天小編就為大家分享一篇java 解析由String類型拼接的XML文件方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Java如何使用elasticsearch進(jìn)行模糊查詢

    Java如何使用elasticsearch進(jìn)行模糊查詢

    這篇文章主要介紹了Java如何使用elasticsearch進(jìn)行模糊查詢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • JAVA WEB中Servlet和Servlet容器的區(qū)別

    JAVA WEB中Servlet和Servlet容器的區(qū)別

    這篇文章主要介紹了JAVA WEB中Servlet和Servlet容器的區(qū)別,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • MyBatis全局配置文件詳解

    MyBatis全局配置文件詳解

    這篇文章主要介紹了mybatis 加載配置文件的方法,通過實例代碼給大家介紹了mybatis 加載配置文件的兩種方式,需要的朋友可以參考下
    2021-07-07
  • 解決Spring Cloud feign GET請求無法用實體傳參的問題

    解決Spring Cloud feign GET請求無法用實體傳參的問題

    這篇文章主要介紹了解決Spring Cloud feign GET請求無法用實體傳參的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 使用JavaCV生成視頻縮略圖的示例詳解

    使用JavaCV生成視頻縮略圖的示例詳解

    在處理多媒體內(nèi)容時,生成視頻的縮略圖是一項常見的需求,這不僅有助于用戶快速預(yù)覽視頻內(nèi)容,還能提高用戶體驗和界面的美觀度,JavaCV是一個用于計算機(jī)視覺的開源框架,使得在Java環(huán)境中處理視頻和圖像變得簡單,本文將介紹如何使用JavaCV來生成視頻的縮略圖
    2025-07-07
  • Java中常見死鎖與活鎖的實例詳解

    Java中常見死鎖與活鎖的實例詳解

    這篇文章主要介紹了Java中常見死鎖與活鎖的實例詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Java單例模式實例簡述

    Java單例模式實例簡述

    這篇文章主要介紹了Java單例模式,在Java應(yīng)用程序設(shè)計中有著非常重要的作用,本文以實例形式對此加以簡單分析,需要的朋友可以參考下
    2014-09-09
  • Java經(jīng)典算法匯總之順序查找(Sequential Search)

    Java經(jīng)典算法匯總之順序查找(Sequential Search)

    Java查找算法之順序查找說明:順序查找適合于存儲結(jié)構(gòu)為順序存儲或鏈接存儲的線性表。 下面我們來詳細(xì)說明下
    2016-04-04

最新評論

广宁县| 左贡县| 化州市| 江门市| 宿迁市| 台南县| 福建省| 阿克苏市| 通许县| 板桥市| 鄂托克旗| 东源县| 迭部县| 高密市| 渝北区| 合江县| 哈巴河县| 庆安县| 扬州市| 南城县| 太湖县| 旌德县| 如东县| 辉南县| 阜新市| 化德县| 财经| 乌鲁木齐县| 邮箱| 阿图什市| 富平县| 鲁甸县| 台前县| 句容市| 台东县| 武鸣县| 蛟河市| 读书| 清新县| 佳木斯市| 沽源县|