99国产精品欲av蜜臀,可以直接免费观看的AV网站,gogogo高清免费完整版,啊灬啊灬啊灬免费毛片

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

培訓(xùn)的?公司剛?cè)肼毜闹屑?jí)Java開(kāi)發(fā),短短4行代碼居然湊齊了3個(gè)bug!

0
分享至


一、前言

Hello 大家好,我是長(zhǎng),今天帶來(lái)一個(gè)真實(shí)案例,讓大家更深刻的理解空指針異常。

公司剛?cè)肼毩艘幻屑?jí)Java開(kāi)發(fā),經(jīng)過(guò)一個(gè)星期的適應(yīng)學(xué)習(xí),各方面表現(xiàn)還不錯(cuò),于是分配了一個(gè)小的迭代給新人做。

需求很簡(jiǎn)單,把從第三方拉取的數(shù)據(jù)匹配到自身公司后臺(tái)設(shè)置的渠道后,聚合到一個(gè)列表中,批量入庫(kù)。

然而就在匹配的邏輯中,上線后報(bào)了個(gè)NPE,這是作為一名中級(jí)開(kāi)發(fā)不應(yīng)犯的簡(jiǎn)單錯(cuò)誤,新人被我狠狠的訓(xùn)了,記生產(chǎn)事故一次。

二、事故重現(xiàn) 1、偽代碼

說(shuō)明:偽代碼并非真實(shí)線上代碼,只是為了更方便,更形象的重現(xiàn)事故現(xiàn)場(chǎng)而編寫(xiě)的;真實(shí)的業(yè)務(wù)場(chǎng)景往往更加復(fù)雜,NPE的漏洞隱藏在更深處,不易code view出來(lái),也不易測(cè)試出來(lái);生產(chǎn)環(huán)境NPE是較常見(jiàn)的異常,希望大家不要糾結(jié)為什么測(cè)試沒(méi)測(cè)出來(lái),關(guān)鍵還是通過(guò)這樣一個(gè)案例了解NPE的原因和解決方案。
// 后臺(tái)設(shè)置的渠道
String channelNo = channelDao.getOne().getChannelNo();
// 第三方拉取的數(shù)據(jù)
List thirdDataList = httpClientUtils.getThirdDatas(DateUtils.today());
// 匹配過(guò)濾
thirdDataList.stream().filter(o ->channelNo.equals(o.getChannelNo())).collect(Collectors.toList());
// 批量入庫(kù)
thirdDataDao.saveAll(thirdDataList);
2、分析與解決

有經(jīng)驗(yàn)、技術(shù)扎實(shí)的同學(xué)看到這里應(yīng)該或多或少能發(fā)現(xiàn)問(wèn)題了。其實(shí)啊,這四段代碼是作者精心設(shè)計(jì)的,可謂是臥龍鳳雛

短短四行代碼居然湊齊了3個(gè)NPE,我枯了~~

我們逐行分析:

3、第一行分析

channelDao.getOne()如果返回為null,那么調(diào)用getChannelNo()會(huì)報(bào)NPE。

4、解決辦法

1、使用防御性編程,提前返回(需根據(jù)具體業(yè)務(wù)場(chǎng)景而定)

// 如果channelNo是方法邏輯執(zhí)行的必須元素,推薦用此方法
Channel channel = channelDao.getOne();
if (channel == null) {
return;

2、使用三目運(yùn)算,返回空字符串("")

// 返回兜底的空字符串
String channelNo = channelDao.getOne() == null ? "" : channelDao.getOne().getChannelNo();

3、使用Optional函數(shù),返回空字符串("")

String channelNo = Optional.ofNullable(channelDao.getOne()).orElse("");
5、第三行分析(1)

thirdDataList如果為null,那么調(diào)用stream()會(huì)報(bào)NPE。

通過(guò)下面的源碼截圖就能知道原因:



6、解決辦法

1、使用防御性編程,提前返回(推薦)

// 推薦使用集合工具類判空
if (CollectionUtils.isEmpty(thirdDataList)) {
return;

2、使用if條件語(yǔ)句包裹(不推薦)

if (CollectionUtils.isNotEmpty(thirdDataList)) {
// 執(zhí)行后面的邏輯
7、第三行分析(2)

channelNo如果返回為null,那么執(zhí)行channelNo.equals(o.getChannelNo())會(huì)報(bào)NPE。

我們知道,按Java的規(guī)范String的equals()方法的調(diào)用,要求左邊是確定值,就是為了避免調(diào)用方為null的情況。然而這里調(diào)用方和equals的入?yún)⒍际亲兞浚@種情況該怎么辦呢?

1、再加一句判斷:

channelNo != null && channelNo.equals(o.getChannelNo())

2、其實(shí)可以用java.uti包下的Objects類的equals方法

Objects.equals(channelNo, o.getChannelNo())

看源碼一目了然,該方法對(duì)左邊的對(duì)象做了非空判斷


3、用其他開(kāi)源的工具類庫(kù)或者自己實(shí)現(xiàn)

如:

org.apache.commons.lang3.StringUtils
cn.hutool.core.util.StrUtil;

原文鏈接:juejin.cn/post/7031445206152577061

原文作者:l拉不拉米

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
緊急暫停!女演員突然從高空墜落

緊急暫停!女演員突然從高空墜落

魯中晨報(bào)
2025-07-23 07:20:09
保羅將成為第七個(gè)!美媒列前六位球員第21個(gè)賽季數(shù)據(jù):老詹25+7+8

保羅將成為第七個(gè)!美媒列前六位球員第21個(gè)賽季數(shù)據(jù):老詹25+7+8

直播吧
2025-07-22 22:52:11
美國(guó)務(wù)院已確認(rèn)!2名美官員觸碰中國(guó)法律,現(xiàn)已被限制離開(kāi)中國(guó)

美國(guó)務(wù)院已確認(rèn)!2名美官員觸碰中國(guó)法律,現(xiàn)已被限制離開(kāi)中國(guó)

現(xiàn)代小青青慕慕
2025-07-23 00:02:36
河南研究生賣(mài)“軍火燒餅”走紅,1元1個(gè)專賣(mài)小學(xué)生,網(wǎng)友:膽真大

河南研究生賣(mài)“軍火燒餅”走紅,1元1個(gè)專賣(mài)小學(xué)生,網(wǎng)友:膽真大

明月聊史
2025-07-23 15:31:21
2025上半年燃油車(chē)銷(xiāo)量TOP20出爐:國(guó)產(chǎn)最高排第五

2025上半年燃油車(chē)銷(xiāo)量TOP20出爐:國(guó)產(chǎn)最高排第五

智車(chē)情報(bào)局
2025-07-23 14:18:35
船記總結(jié):保羅當(dāng)年去火箭換來(lái)的籌碼,如今變成了哈登科林斯

船記總結(jié):保羅當(dāng)年去火箭換來(lái)的籌碼,如今變成了哈登科林斯

雷速體育
2025-07-23 17:15:41
小叔在我家住了8年,如今他身居高位,母親找他幫忙,他卻拒絕了

小叔在我家住了8年,如今他身居高位,母親找他幫忙,他卻拒絕了

少女說(shuō)籃球
2025-07-23 15:58:03
東風(fēng)導(dǎo)彈泄密案:間諜郭萬(wàn)鈞一家三口,全部被處以死刑

東風(fēng)導(dǎo)彈泄密案:間諜郭萬(wàn)鈞一家三口,全部被處以死刑

冰點(diǎn)歷史
2025-07-15 09:33:13
俄烏戰(zhàn)爭(zhēng)打這么久俄的經(jīng)濟(jì)為何沒(méi)有崩盤(pán)你是根本不知道我接多少單

俄烏戰(zhàn)爭(zhēng)打這么久俄的經(jīng)濟(jì)為何沒(méi)有崩盤(pán)你是根本不知道我接多少單

侃神評(píng)故事
2025-07-17 20:21:26
中國(guó)需準(zhǔn)備應(yīng)對(duì)俄羅斯解體,確保700萬(wàn)土地安全

中國(guó)需準(zhǔn)備應(yīng)對(duì)俄羅斯解體,確保700萬(wàn)土地安全

阿釗是個(gè)小小評(píng)論員
2025-07-09 17:34:00
奧科吉底薪加盟!火箭拉滿鋒線和防守 14人輪換是下季最強(qiáng)戰(zhàn)隊(duì)?

奧科吉底薪加盟!火箭拉滿鋒線和防守 14人輪換是下季最強(qiáng)戰(zhàn)隊(duì)?

直播吧
2025-07-23 09:18:09
臺(tái)灣黑幫大佬陳啟禮:我寧可被共產(chǎn)黨管著,也不讓臺(tái)灣被外人拿走

臺(tái)灣黑幫大佬陳啟禮:我寧可被共產(chǎn)黨管著,也不讓臺(tái)灣被外人拿走

愛(ài)史紀(jì)
2025-07-21 16:30:26
演員劉歡:長(zhǎng)相被嫌,被朋友騙光積蓄,終于憑借《掃毒風(fēng)暴》走紅

演員劉歡:長(zhǎng)相被嫌,被朋友騙光積蓄,終于憑借《掃毒風(fēng)暴》走紅

新語(yǔ)愛(ài)八卦
2025-07-23 15:02:41
烏軍證實(shí):俄軍進(jìn)入紅軍城

烏軍證實(shí):俄軍進(jìn)入紅軍城

觀察者網(wǎng)
2025-07-23 13:04:11
你們是不是對(duì)“下一盤(pán)大棋”有什么誤會(huì)?

你們是不是對(duì)“下一盤(pán)大棋”有什么誤會(huì)?

邏輯與常識(shí)
2025-07-18 06:58:00
暴發(fā)戶舅舅93年買(mǎi)下京城5套四合院后坐牢,出獄去那一看,當(dāng)場(chǎng)跪下

暴發(fā)戶舅舅93年買(mǎi)下京城5套四合院后坐牢,出獄去那一看,當(dāng)場(chǎng)跪下

紅豆講堂
2025-07-21 16:30:58
1950年才得知妹妹尚有女兒在世,毛主席急問(wèn)毛岸英:她現(xiàn)在在哪兒

1950年才得知妹妹尚有女兒在世,毛主席急問(wèn)毛岸英:她現(xiàn)在在哪兒

小莜讀史
2025-07-22 20:29:58
陰法唐同志逝世

陰法唐同志逝世

上觀新聞
2025-07-04 12:15:02
交警提醒:無(wú)證酒駕、隔夜酒駕,全部取締!喝酒不開(kāi)車(chē)

交警提醒:無(wú)證酒駕、隔夜酒駕,全部取締!喝酒不開(kāi)車(chē)

聯(lián)友說(shuō)娛
2025-07-22 13:41:07
重慶雙胞胎兄弟分別被清華、北大錄取

重慶雙胞胎兄弟分別被清華、北大錄取

封面新聞
2025-07-23 14:55:04
2025-07-23 20:03:00
Meta
Meta
關(guān)注java進(jìn)階架構(gòu)師送架構(gòu)
1059文章數(shù) 9856關(guān)注度
往期回顧 全部

科技要聞

別自嗨了!XREAL徐馳:AI眼鏡只有5歲智商

頭條要聞

印度、孟加拉關(guān)切雅魯藏布江下游水電站工程 中方回應(yīng)

頭條要聞

印度、孟加拉關(guān)切雅魯藏布江下游水電站工程 中方回應(yīng)

體育要聞

英格蘭最紅球星 也是加勒比島國(guó)驕傲

娛樂(lè)要聞

汪峰森林北同游日本 各帶各娃互不耽誤

財(cái)經(jīng)要聞

律師解析娃哈哈遺產(chǎn)案:遺囑是最大變數(shù)

汽車(chē)要聞

德系大招放盡 場(chǎng)地極限測(cè)試全新奧迪A5L

態(tài)度原創(chuàng)

健康
教育
數(shù)碼
家居
手機(jī)

呼吸科專家破解呼吸道九大謠言!

教育要聞

2025年天津高考提前批投檔線分析:中國(guó)民航大學(xué)訂單班受熱捧

數(shù)碼要聞

全漢帶來(lái) VIC GD 系列電源:僅擁有 3 年質(zhì)保的金牌非模組 ATX

家居要聞

晨曦生活 明媚而放松

手機(jī)要聞

主流安卓品牌中,誰(shuí)兼容蘋(píng)果生態(tài)最好?

無(wú)障礙瀏覽 進(jìn)入關(guān)懷版 主站蜘蛛池模板: 谢通门县| 太和县| 昭通市| 新竹县| 临城县| 尼勒克县| 太白县| 上虞市| 三台县| 和静县| 阜新| 湾仔区| 庆云县| 东方市| 民县| 井陉县| 盖州市| 平邑县| 浏阳市| 绵阳市| 衡水市| 海晏县| 万载县| 安化县| 锡林浩特市| 南皮县| 木兰县| 江北区| 金昌市| 大埔县| 江山市| 北宁市| 和田县| 南岸区| 无极县| 天峨县| 桐庐县| 昭苏县| 苍梧县| 青冈县| 崇信县|