精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

瞧瞧別人家的判空,那叫一個優雅!

開發 前端
我們在日常開發中的entity對象,一般會使用Lombok框架中的注解,來實現getter/setter方法。

一、傳統判空的血淚史

某互聯網金融平臺因費用計算層級的空指針異常,導致凌晨產生9800筆錯誤交易。

DEBUG日志顯示問題出現在如下代碼段:

// 錯誤示例
BigDecimal amount = user.getWallet().getBalance().add(new BigDecimal("100"));

此類鏈式調用若中間環節出現null值,必定導致NPE。

初級階段開發者通常寫出多層嵌套式判斷:

if(user != null){
    Wallet wallet = user.getWallet();
    if(wallet != null){
        BigDecimal balance = wallet.getBalance();
        if(balance != null){
            // 實際業務邏輯
        }
    }
}

這種寫法既不優雅又影響代碼可讀性。

那么,我們該如何優化呢?

二、Java 8+時代的判空革命

Java8之后,新增了Optional類,它是用來專門判空的。

能夠幫你寫出更加優雅的代碼。

1. Optional黃金三板斧

// 重構后的鏈式調用
BigDecimal result = Optional.ofNullable(user)
    .map(User::getWallet)
    .map(Wallet::getBalance)
    .map(balance -> balance.add(new BigDecimal("100")))
    .orElse(BigDecimal.ZERO);

高級用法:條件過濾

Optional.ofNullable(user)
    .filter(u -> u.getVipLevel() > 3)
    .ifPresent(u -> sendCoupon(u)); // VIP用戶發券

2. Optional拋出業務異常

BigDecimal balance = Optional.ofNullable(user)
    .map(User::getWallet)
    .map(Wallet::getBalance)
    .orElseThrow(() -> new BusinessException("用戶錢包數據異常"));

3. 封裝通用工具類

public class NullSafe {
    
    // 安全獲取對象屬性
    public static <T, R> R get(T target, Function<T, R> mapper, R defaultValue) {
        return target != null ? mapper.apply(target) : defaultValue;
    }
    
    // 鏈式安全操作
    public static <T> T execute(T root, Consumer<T> consumer) {
        if (root != null) {
            consumer.accept(root);
        }
        return root;
    }
}

// 使用示例
NullSafe.execute(user, u -> {
    u.getWallet().charge(new BigDecimal("50"));
    logger.info("用戶{}已充值", u.getId());
});

三、現代化框架的判空銀彈

4. Spring實戰技巧

Spring中自帶了一些好用的工具類,比如:CollectionUtils、StringUtils等,可以非常有效的進行判空。

具體代碼如下:

// 集合判空工具
List<Order> orders = getPendingOrders();
if (CollectionUtils.isEmpty(orders)) {
    return Result.error("無待處理訂單");
}

// 字符串檢查
String input = request.getParam("token");
if (StringUtils.hasText(input)) {
    validateToken(input); 
}

5. Lombok保駕護航

我們在日常開發中的entity對象,一般會使用Lombok框架中的注解,來實現getter/setter方法。

其實,這個框架中也提供了@NonNull等判空的注解。

比如:

@Getter
@Setter
public class User {
    @NonNull // 編譯時生成null檢查代碼
    private String name;
    
    private Wallet wallet;
}

// 使用構造時自動判空
User user = new User(@NonNull "張三", wallet);

四、工程級解決方案

6. 空對象模式

public interface Notification {
    void send(String message);
}

// 真實實現
public class EmailNotification implements Notification {
    @Override
    public void send(String message) {
        // 發送郵件邏輯
    }
}

// 空對象實現
public class NullNotification implements Notification {
    @Override
    public void send(String message) {
        // 默認處理
    }
}

// 使用示例
Notification notifier = getNotifier();
notifier.send("系統提醒"); // 無需判空

7. Guava的Optional增強

其實Guava工具包中,給我們提供了Optional增強的功能。

比如:

import com.google.common.base.Optional;

// 創建攜帶缺省值的Optional
Optional<User> userOpt = Optional.fromNullable(user).or(defaultUser);

// 鏈式操作配合Function
Optional<BigDecimal> amount = userOpt.transform(u -> u.getWallet())
                                    .transform(w -> w.getBalance());

Guava工具包中的Optional類已經封裝好了,我們可以直接使用。

五、防御式編程進階

8. Assert斷言式攔截

其實有些Assert斷言類中,已經做好了判空的工作,參數為空則會拋出異常。

這樣我們就可以直接調用這個斷言類。

例如下面的ValidateUtils類中的requireNonNull方法,由于它內容已經判空了,因此,在其他地方調用requireNonNull方法時,如果為空,則會直接拋異常。

我們在業務代碼中,直接調用requireNonNull即可,不用寫額外的判空邏輯。

例如:

public class ValidateUtils {
    public static <T> T requireNonNull(T obj, String message) {
        if (obj == null) {
            throw new ServiceException(message);
        }
        return obj;
    }
}

// 使用姿勢
User currentUser = ValidateUtils.requireNonNull(
    userDao.findById(userId), 
    "用戶不存在-ID:" + userId
);

9. 全局AOP攔截

我們在一些特殊的業務場景種,可以通過自定義注解 + 全局AOP攔截器的方式,來實現實體或者字段的判空。

例如:

@Aspect
@Component
public class NullCheckAspect {
    
    @Around("@annotation(com.xxx.NullCheck)")
    public Object checkNull(ProceedingJoinPoint joinPoint) throws Throwable {
        Object[] args = joinPoint.getArgs();
        for (Object arg : args) {
            if (arg == null) {
                throw new IllegalArgumentException("參數不可為空");
            }
        }
        return joinPoint.proceed();
    }
}

// 注解使用
public void updateUser(@NullCheck User user) {
    // 方法實現
}

六、實戰場景對比分析

場景1:深層次對象取值

// 舊代碼(4層嵌套判斷)
if (order != null) {
    User user = order.getUser();
    if (user != null) {
        Address address = user.getAddress();
        if (address != null) {
            String city = address.getCity();
            // 使用city
        }
    }
}

// 重構后(流暢鏈式)
String city = Optional.ofNullable(order)
    .map(Order::getUser)
    .map(User::getAddress)
    .map(Address::getCity)
    .orElse("未知城市");

場景2:批量數據處理

List<User> users = userService.listUsers();

// 傳統寫法(顯式迭代判斷)
List<String> names = new ArrayList<>();
for (User user : users) {
    if (user != null && user.getName() != null) {
        names.add(user.getName());
    }
}

// Stream優化版
List<String> nameList = users.stream()
    .filter(Objects::nonNull)
    .map(User::getName)
    .filter(Objects::nonNull)
    .collect(Collectors.toList());

七、性能與安全的平衡藝術

上面介紹的這些方案都可以使用,但除了代碼的可讀性之外,我們還需要考慮一下性能因素。

下面列出了上面的幾種在CPU消耗、內存只用和代碼可讀性的對比:

方案

CPU消耗

內存占用

代碼可讀性

適用場景

多層if嵌套



★☆☆☆☆

簡單層級調用

Java Optional



★★★★☆

中等復雜度業務流

空對象模式



★★★★★

高頻調用的基礎服務

AOP全局攔截



★★★☆☆

接口參數非空驗證

黃金法則

  • Web層入口強制參數校驗
  • Service層使用Optional鏈式處理
  • 核心領域模型采用空對象模式

八、擴展技術

除了,上面介紹的常規判空之外,下面再給大家介紹兩種擴展的技術。

Kotlin的空安全設計

雖然Java開發者無法直接使用,但可借鑒其設計哲學:

val city = order?.user?.address?.city ?: "default"

JDK 14新特性預覽

// 模式匹配語法嘗鮮
if (user instanceof User u && u.getName() != null) {
    System.out.println(u.getName().toUpperCase());
}

總之,優雅判空不僅是代碼之美,更是生產安全底線。

本文分享了代碼判空的10種方案,希望能夠幫助你編寫出既優雅又健壯的Java代碼。

責任編輯:武曉燕 來源: 蘇三說技術
相關推薦

2025-05-30 08:20:54

2024-11-12 08:20:31

2025-04-08 08:20:33

2024-10-24 08:21:33

2024-12-02 00:59:30

Spring

2025-04-22 08:20:51

2022-12-12 08:14:47

2025-02-28 08:21:00

2025-07-14 00:00:00

接口重試MQTT冪等性

2025-03-11 08:20:58

2025-08-19 10:01:43

2020-11-03 16:00:33

API接口微服務框架編程語言

2017-11-12 21:32:52

戴爾

2015-09-24 09:22:16

nodejs頁面始末

2016-01-08 09:49:19

DockerDocker案例云應用開發

2020-11-17 09:34:31

API接口后端

2017-09-22 13:22:59

大數據南京大學宿舍

2023-12-30 20:04:51

MyBatis框架數據

2021-07-14 06:31:08

京東互聯網加薪

2021-01-20 05:42:27

RabbitMQMQ vhost
點贊
收藏

51CTO技術棧公眾號

一区二区视频在线免费| 成人性生交xxxxx网站| 五级黄高潮片90分钟视频| 亚洲校园激情春色| 国产精品伦一区二区三级视频| 成人欧美一区二区三区在线| 国产真人真事毛片| 国产aⅴ精品一区二区三区久久| 欧美日韩国产免费| 国产日韩av网站| 成人精品一区二区三区校园激情| 国产麻豆精品视频| 日韩av男人的天堂| 欧美丰满熟妇bbbbbb| 欧美黄色录像| 欧美一区二区三区的| 91猫先生在线| a毛片在线看免费观看| 久久久久综合网| 成人永久免费| 在线观看国产精品视频| 欧美深夜福利| 最近中文字幕日韩精品 | 日韩av电影免费观看高清完整版| 久久久精品视频成人| 巨胸大乳www视频免费观看| 欧美欧美在线| 欧美日韩高清一区二区不卡| 黄色动漫网站入口| 欧洲在线视频| 国产精品不卡一区二区三区| 欧美一级二级三级九九九| 亚洲成a人片在线| 美女一区二区三区| 国产精品99免视看9| 日本五十路女优| 欧美精品国产一区二区| 久久精品这里热有精品| 99精品欧美一区二区| 日韩伦理一区二区三区| 精品久久久久久综合日本欧美| 超碰人人草人人| 日本精品网站| 欧美亚洲一区二区在线观看| 免费在线观看毛片网站| 人在线成免费视频| 亚洲国产成人av好男人在线观看| 最新av在线免费观看| 91精彩在线视频| 国产欧美精品在线观看| 欧美在线视频二区| 激情在线视频| 欧美激情一区三区| 日韩欧美亚洲v片| 国产一级网站视频在线| 日本一区二区三区在线不卡| 日韩精品国内| a黄色在线观看| 国产精品视频第一区| 亚洲国产精品综合| 日本中文字幕在线观看| 亚洲欧洲日韩av| 玖玖精品在线视频| а√中文在线8| 亚洲愉拍自拍另类高清精品| 欧美狂野激情性xxxx在线观| a'aaa级片在线观看| 黄网动漫久久久| 日本www在线播放| 日韩欧美一区二区三区免费观看| 欧美又粗又大又爽| 国产乱女淫av麻豆国产| 五月亚洲婷婷| 亚洲精品成人久久电影| 91精彩刺激对白露脸偷拍| 国产真实有声精品录音| 深夜福利一区二区| www欧美com| 亚洲激情在线| 日韩av免费在线| 国产精品伊人久久| 成人福利视频网站| 日本在线视频不卡| 黄色av免费在线| 亚洲国产欧美在线人成| 国产日韩成人内射视频| 国产视频一区二| 日韩成人在线视频| 日本猛少妇色xxxxx免费网站| 亚洲精品a级片| 91av在线视频观看| 中文字幕人妻一区二区在线视频| 国产伦精品一区二区三区免费迷| 国产三区精品| 日韩精品黄色| 狠狠做深爱婷婷久久综合一区| 91制片厂毛片| 精品欠久久久中文字幕加勒比| 国产一区二区三区久久精品| 久久r这里只有精品| 国产精品一国产精品k频道56| 91精品国产自产在线老师啪| 后入内射欧美99二区视频| 国产网红主播福利一区二区| 美女av免费观看| 欧美日韩精品一区二区三区视频| 精品国产一区二区三区不卡| 毛片视频免费播放| 99精品国产福利在线观看免费| 国产欧美精品va在线观看| 国 产 黄 色 大 片| 亚洲国产精品黑人久久久| 男女私大尺度视频| 91精品福利观看| 亚洲欧美中文字幕| 国产在线拍揄自揄拍| 久久精品国产99久久6| 久久亚洲免费| av在线理伦电影| 欧美福利电影网| 亚洲女优在线观看| 野花国产精品入口| 国产富婆一区二区三区| 欧美18hd| 欧美三级韩国三级日本三斤| 国产亚洲无码精品| 激情综合激情| 成人激情直播| 国产91在线视频蝌蚪| 欧美视频一区二区三区| 日本高清www| 中文欧美日韩| 国产精品日本一区二区| 亚洲大胆人体大胆做受1| 欧美另类videos死尸| 中文字幕免费在线看线人动作大片| 亚洲精选在线| 国产麻豆一区二区三区在线观看| h片在线观看网站| 3d成人h动漫网站入口| 妖精视频在线观看免费| 日本色综合中文字幕| 日本午夜精品一区二区三区| 巨茎人妖videos另类| 精品性高朝久久久久久久| 日本少妇在线观看| 成人免费黄色在线| 男人天堂av片| 红杏aⅴ成人免费视频| 久久人人97超碰精品888| 性做久久久久久久| 亚洲制服丝袜av| 在线xxxxx| 亚洲国产二区| 久久精品国产一区二区三区日韩| 校园春色亚洲| 亚洲人成在线播放| 中国黄色一级视频| 中文字幕在线一区免费| 黄色a级三级三级三级| 欧美三级午夜理伦三级中文幕| 成人免费视频网站入口| 2018av在线| 亚洲精品一区二三区不卡| 岛国av中文字幕| 国产精品污污网站在线观看 | 国产精品一区二区黑丝| 国产www免费| 蜜桃tv一区二区三区| 国产精品视频xxx| 成a人片在线观看| 亚洲国产精品系列| 久久久久亚洲视频| **欧美大码日韩| 国产av一区二区三区传媒| 国产一区二区三区久久久久久久久| 欧美日韩免费高清| 少妇精品视频在线观看| 欧美激情欧美激情| 青青九九免费视频在线| 欧美性欧美巨大黑白大战| 中国毛片直接看| 91网上在线视频| 亚洲欧美手机在线| 影院欧美亚洲| 一本一道久久a久久精品综合| 日韩精品成人| 日本a级片电影一区二区| www.久久热.com| 欧美成人午夜电影| 久久国产乱子伦精品| 一区二区三区av电影| 短视频在线观看| 国产一区999| 粉嫩虎白女毛片人体| 欧美va天堂在线| 视频一区二区综合| 国产精品网址| 成人黄色中文字幕| 欧美片第一页| 欧美激情一级精品国产| av电影在线观看| 亚洲精品久久久久中文字幕欢迎你| 中文字幕一区二区在线视频| 亚洲成人动漫一区| 91杏吧porn蝌蚪| 中文字幕第一页久久| 呦呦视频在线观看| 国产一区二区精品在线观看| 天天操天天爽天天射| 亚洲激情女人| 欧美黄网在线观看| 97精品国产福利一区二区三区| 久久er99热精品一区二区三区| 国产精品国产三级在线观看| 国产91在线播放九色快色| 黄页在线观看免费| 久久九九亚洲综合| jizz日韩| 国产亚洲精品美女久久久| 免费观看成年人视频| 91精品国产色综合久久不卡电影| 国产成人自拍偷拍| 色综合天天综合网天天看片| 黄色激情视频在线观看| 亚洲另类中文字| 欧美肥妇bbwbbw| 欧美国产97人人爽人人喊| 久久精品老司机| 91视频国产观看| 亚洲香蕉中文网| 国产精品亚洲成人| 黄色片子免费看| 国产一区二区三区黄视频| 免费成年人高清视频| 蜜桃视频一区二区三区| 别急慢慢来1978如如2| 久久精品伊人| av免费中文字幕| 久久精品午夜| 91香蕉视频污版| 日韩中文字幕麻豆| 密臀av一区二区三区| 老司机午夜精品视频在线观看| 黄色影院一级片| 久久精品女人天堂| 老司机午夜av| 精品一区二区三区欧美| 亚洲精品第三页| 国产精品资源站在线| 国产黄色一区二区三区| 懂色av中文字幕一区二区三区| 又色又爽又黄18网站| 国产91丝袜在线18| 久久精品女同亚洲女同13| 97精品久久久午夜一区二区三区 | 97免费视频在线播放| av资源中文在线天堂| 2023亚洲男人天堂| 性欧美超级视频| 国产精选久久久久久| 国产一区二区三区免费在线| dy888夜精品国产专区| 加勒比中文字幕精品| 欧美不卡三区| 日本午夜一区| 大地资源网在线观看免费官网 | 色婷婷综合久久久久中文字幕| 日韩黄色一级片| 国产三级生活片| 懂色av噜噜一区二区三区av | 亚洲人成精品久久久久久| 激情五月少妇a| 调教+趴+乳夹+国产+精品| 欧产日产国产69| 欧美精品日日鲁夜夜添| 午夜精品久久久久久久爽| 日韩精品中文在线观看| 91欧美在线视频| 国内精品久久久久影院优| 怡红院成人在线| 91在线播放国产| 天堂一区二区三区四区| 在线成人性视频| 亚洲精品偷拍| av亚洲天堂网| 菠萝蜜视频在线观看一区| 日韩av片在线| 亚洲国产综合在线| 国产无遮挡又黄又爽又色视频| 91精品国产一区二区| 天堂av在线资源| 久久夜精品va视频免费观看| 天堂av中文在线观看| 91久久精品国产91久久性色| 天堂俺去俺来也www久久婷婷| 国产高潮呻吟久久久| 亚洲女人av| 99精品视频免费版的特色功能| 久久久久久久网| 久操免费在线视频| 欧美色成人综合| 天堂成人在线观看| 一区二区三区视频观看| 国产丝袜精品丝袜| 国产专区欧美专区| 久久av综合| r级无码视频在线观看| 麻豆成人久久精品二区三区小说| 亚洲中文字幕一区| 亚洲免费伊人电影| 中文精品久久久久人妻不卡| 亚洲国产黄色片| 羞羞电影在线观看www| 国产精品日韩欧美| 蜜桃一区二区三区| 精品视频在线观看一区| 国产一区二区不卡在线| 网站永久看片免费| 91福利国产成人精品照片| 污污网站免费在线观看| 欧美日韩国产二区| 爱情电影网av一区二区| 亚洲精品成人自拍| 久久亚洲影院| 国产男男chinese网站| 亚洲r级在线视频| 亚洲欧美强伦一区二区| 美女精品久久久| 亚洲日本中文| 中文字幕一区二区三区四区五区六区 | 欧美美女操人视频| 欧美风情在线视频| 日韩一区二区电影在线观看| 久久九九精品| 美女洗澡无遮挡| 色婷婷久久综合| 国际av在线| 国产精品第二页| 欧美少妇性xxxx| 午夜免费福利在线| 国产精品美女一区二区| 黄色av一区二区| 中文字幕成人精品久久不卡| 日韩制服一区| 伊人色综合影院| 久久99精品久久久| 天天做夜夜爱爱爱| 56国语精品自产拍在线观看| 免费的黄网站在线观看| 成人网在线视频| 综合天堂久久久久久久| 国产精品无码自拍| 亚洲超碰精品一区二区| 少妇av一区二区| 欧美在线激情网| 精品99在线| 在线观看免费污视频| 亚洲欧美日韩一区| 亚洲AV午夜精品| 97精品国产97久久久久久春色| 欧美亚视频在线中文字幕免费| 日本成年人网址| 中文字幕免费一区| 国产精品伦理一区| 欧美激情xxxxx| 久久综合社区| 午夜精品在线免费观看| 综合婷婷亚洲小说| 高清毛片aaaaaaaaa片| 亚洲91av视频| 日本不卡电影| 国产清纯白嫩初高中在线观看性色| 亚洲成人一二三| 国产精品秘入口| 114国产精品久久免费观看| 亚洲全部视频| 国产精品18在线| 欧美变态tickle挠乳网站| 这里有精品可以观看| 在线电影看在线一区二区三区| 成人午夜激情在线| 看黄色一级大片| 久久国产精彩视频| 猛男gaygay欧美视频| 国产美女视频免费看| 狠狠干狠狠久久| 黄色在线播放网站| 久久亚洲一区二区| 精品在线视频一区| 国产免费av一区二区| 中文字幕自拍vr一区二区三区| 伊人久久影院| 日本三级黄色网址| 欧美性黄网官网| 中文国产字幕在线观看| 日本一区二区三区免费观看| 国产黄色精品网站| 亚洲av综合一区| 欧美亚洲国产视频小说|