AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

代碼出錯(cuò)了,IDE竟然不報(bào)錯(cuò)?太詭異了....

來(lái)源: 責(zé)編: 時(shí)間:2024-01-04 09:33:20 311觀看
導(dǎo)讀小伙伴好哇,我是Tom哥。今天分享一個(gè)寫代碼時(shí)遇到的詭異問(wèn)題,如何排查解決的。從事互聯(lián)網(wǎng)的人都懂,一般遇到問(wèn)題時(shí),首先會(huì)想用谷歌、百度等搜索引擎,看看前輩們是如何解決的。但有些問(wèn)題比較抽象,不知道如何來(lái)描述,怎么辦?或

XUb28資訊網(wǎng)——每日最新資訊28at.com

小伙伴好哇,我是Tom哥。XUb28資訊網(wǎng)——每日最新資訊28at.com

今天分享一個(gè)寫代碼時(shí)遇到的詭異問(wèn)題,如何排查解決的。XUb28資訊網(wǎng)——每日最新資訊28at.com

從事互聯(lián)網(wǎng)的人都懂,一般遇到問(wèn)題時(shí),首先會(huì)想用谷歌、百度等搜索引擎,看看前輩們是如何解決的。XUb28資訊網(wǎng)——每日最新資訊28at.com

但有些問(wèn)題比較抽象,不知道如何來(lái)描述,怎么辦?或者勉強(qiáng)描述清楚了,搜出來(lái)的答案也很難滿足要求,整個(gè)過(guò)程猶如大海撈針。最后求助 ChatGPT 瞬間解決,給大家分享下解決思路。XUb28資訊網(wǎng)——每日最新資訊28at.com

問(wèn)題的來(lái)龍去脈

正在開(kāi)發(fā)一個(gè)項(xiàng)目,倉(cāng)儲(chǔ)層有一個(gè)接口類(IProductReadRepository),其中一個(gè)方法的入?yún)⑹褂昧?Java 泛型,具體如下:XUb28資訊網(wǎng)——每日最新資訊28at.com

List<SpuVO> batchQuerySpuBySpuIdsFromDB(ProductQueryWrapper<List<Long>> req);

在上層的領(lǐng)域服務(wù)中,有一處調(diào)用這個(gè)方法的代碼,具體如下:XUb28資訊網(wǎng)——每日最新資訊28at.com

ProductQueryWrapper productQueryWrapper = ProductQueryWrapper.builder()        .bizCode(BusinessCodeEnum.SMART.getCode())        .bizScene(BusinessSceneEnum.RETAIL.getCode())        .storeId(multiPackageVO.getStoreId())        .bizParams(spuIds)        .build();List<ProductSummaryVO> productSummaryVOS = productReadRepository.batchQuerySpuBySpuIdsFromDB(productQueryWrapper);if (CollectionUtils.isEmpty(productSummaryVOS)) {    bizResult.error(BizErrorCode.MULTI_PACKAGE_PRODUCT_NOT_EXIST);    return bizResult;}

其中,List<ProductSummaryVO> productSummaryVOS = productReadRepository.batchQuerySpuBySpuIdsFromDB(productQueryWrapper); 這行代碼非常詭異XUb28資訊網(wǎng)——每日最新資訊28at.com

返回的結(jié)果List<ProductSummaryVO>并不匹配,但在IDEA中卻沒(méi)有報(bào)錯(cuò),這讓我們感到非常困擾。XUb28資訊網(wǎng)——每日最新資訊28at.com

這是怎么回事?XUb28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)時(shí)懷疑是錯(cuò)覺(jué),仔細(xì)對(duì)比了兩個(gè)方法,確實(shí)是對(duì)的。XUb28資訊網(wǎng)——每日最新資訊28at.com

又懷疑是 IDEA 的緩存干擾導(dǎo)致,所以將工程重新 build 了一次還是不行!XUb28資訊網(wǎng)——每日最新資訊28at.com

接下來(lái),能想到的各種招數(shù)都招呼上,比如:XUb28資訊網(wǎng)——每日最新資訊28at.com

  • 在終端執(zhí)行 mvn clean install -U,重新編譯代碼,并強(qiáng)制 Maven 更新所有依賴的快照版本(Snapshot)
  • 手動(dòng)將 maven 的本地倉(cāng)庫(kù)的依賴包全部刪除,重新拉取
  • 將本地工程文件中的 target 文件刪除
  • .....

最后,使出絕招,將本地的工程代碼全部刪除,然后重新從 git 上拉取最新代碼,編譯,導(dǎo)入到 IDEA 工程。XUb28資訊網(wǎng)——每日最新資訊28at.com

但,但,但,問(wèn)題依然存在,真讓人崩潰。XUb28資訊網(wǎng)——每日最新資訊28at.com

難道是 IDEA 中的錯(cuò)誤檢查失效了,于是人為制造了一些錯(cuò)誤,發(fā)現(xiàn) IDEA 也都能識(shí)別出來(lái)。XUb28資訊網(wǎng)——每日最新資訊28at.com

實(shí)在沒(méi)招了。。。。。。。XUb28資訊網(wǎng)——每日最新資訊28at.com

最后,還是問(wèn)下 ChatGPT 吧XUb28資訊網(wǎng)——每日最新資訊28at.com

首先,先把問(wèn)題描述清楚,ChatGPT 特懂人情世故,你跟他講清楚問(wèn)題,他也會(huì)給你一個(gè)清楚的答案。XUb28資訊網(wǎng)——每日最新資訊28at.com

有一個(gè)接口內(nèi)的方法定義如下: List<SpuVO> batchQuerySpuBySpuIdsFromDB(ProductQueryWrapper<List<Long>> req);使用下面的代碼來(lái)調(diào)用 batchQuerySpuBySpuIdsFromDB,返回的 List<SpuVO> 結(jié)果并不匹配,但在 IDEA 中沒(méi)有報(bào)錯(cuò),是什么原因?ProductQueryWrapper productQueryWrapper = ProductQueryWrapper.builder()        .bizCode(BusinessCodeEnum.SMART.getCode())        .bizScene(BusinessSceneEnum.RETAIL.getCode())        .storeId(multiPackageVO.getStoreId())        .bizParams(spuIds)        .build();List<ProductSummaryVO> productSummaryVOS = productReadRepository.batchQuerySpuBySpuIdsFromDB(productQueryWrapper);if (CollectionUtils.isEmpty(productSummaryVOS)) {    bizResult.error(BizErrorCode.MULTI_PACKAGE_PRODUCT_NOT_EXIST);    return bizResult;}

XUb28資訊網(wǎng)——每日最新資訊28at.com

ChatGPT 很快就給出了答案。XUb28資訊網(wǎng)——每日最新資訊28at.com

問(wèn)題可能出在泛型擦除和編譯時(shí)類型檢查上。由于Java泛型的擦除機(jī)制,在運(yùn)行時(shí)無(wú)法獲取泛型的實(shí)際類型,這可能導(dǎo)致類型不匹配的問(wèn)題。XUb28資訊網(wǎng)——每日最新資訊28at.com

XUb28資訊網(wǎng)——每日最新資訊28at.com

那我們就按照它的思路來(lái),將這行代碼  ProductQueryWrapper productQueryWrapper = ProductQueryWrapper.builder()XUb28資訊網(wǎng)——每日最新資訊28at.com

修改為  ProductQueryWrapper<List<Long>> productQueryWrapper = ProductQueryWrapper.<List<Long>>builder()XUb28資訊網(wǎng)——每日最新資訊28at.com

在構(gòu)建 ProductQueryWrapper 對(duì)象時(shí), 指定泛型參數(shù)的具體類型,以便在運(yùn)行時(shí)能夠正確地識(shí)別參數(shù)類型。XUb28資訊網(wǎng)——每日最新資訊28at.com

然后,問(wèn)題真的解決了。XUb28資訊網(wǎng)——每日最新資訊28at.com

如下圖所示,第二處紅框位置的代碼開(kāi)始報(bào)錯(cuò)。因?yàn)榻涌诘囊?guī)范(返回結(jié)果)調(diào)整了,此處確實(shí)應(yīng)該報(bào)錯(cuò)提示。XUb28資訊網(wǎng)——每日最新資訊28at.com

XUb28資訊網(wǎng)——每日最新資訊28at.com

后面,我們根據(jù)錯(cuò)誤提示,將 ProductSummaryVO 類替換成 SpuVO 類。XUb28資訊網(wǎng)——每日最新資訊28at.com

最終,不但編譯不報(bào)錯(cuò),單元測(cè)試也能跑通。問(wèn)題完美解決。XUb28資訊網(wǎng)——每日最新資訊28at.com

XUb28資訊網(wǎng)——每日最新資訊28at.com

背后的原因

為何在 IDEA 中沒(méi)有直接報(bào)錯(cuò)呢?這里牽扯到Java泛型的類型推斷機(jī)制。XUb28資訊網(wǎng)——每日最新資訊28at.com

上述代碼中,雖然使用了原始類型 ProductQueryWrapper ,但沒(méi)有指定具體的泛型類型。XUb28資訊網(wǎng)——每日最新資訊28at.com

Java 7 及以后的版本引入了菱形操作符(Diamond Operator),允許在創(chuàng)建對(duì)象時(shí)不再重復(fù)指定泛型類型,而是通過(guò)上下文進(jìn)行類型推斷。XUb28資訊網(wǎng)——每日最新資訊28at.com

這就意味著在你的代碼中,雖然沒(méi)有明確指定泛型類型,但由于在 ProductQueryWrapper.builder() 上下文中,編譯器會(huì)嘗試根據(jù)調(diào)用方的期望類型來(lái)推斷泛型參數(shù)。XUb28資訊網(wǎng)——每日最新資訊28at.com

這種類型推斷機(jī)制使得在 IDEA 開(kāi)發(fā)工具不會(huì)直接報(bào)錯(cuò),也就出現(xiàn)了上文說(shuō)到的那個(gè)問(wèn)題。XUb28資訊網(wǎng)——每日最新資訊28at.com

今天的分享就到這里,我們下回再見(jiàn)。XUb28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-57393-0.html代碼出錯(cuò)了,IDE竟然不報(bào)錯(cuò)?太詭異了....

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Spring國(guó)際化的應(yīng)用及原理詳解

下一篇: Elasticsearch 8.X 小技巧:使用存儲(chǔ)腳本優(yōu)化數(shù)據(jù)索引與轉(zhuǎn)換過(guò)程

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 盧偉冰長(zhǎng)文解析K60至尊版 對(duì)Redmi有著里程碑式的意義

    在今天的Redmi后性能時(shí)代戰(zhàn)略發(fā)布會(huì)結(jié)束之后,Redmi總經(jīng)理盧偉冰又帶來(lái)了一篇長(zhǎng)文,詳解了為什么 Redmi 要開(kāi)啟后性能時(shí)代?為什么選擇和 MediaTek、Pixelworks 深度合作?以及后性
  • 跑分安卓第一!Redmi K60至尊版8月發(fā)布!盧偉冰:目標(biāo)年度性能之王

    8月5日消息,Redmi K60至尊版將于8月發(fā)布,在此前舉行的戰(zhàn)略發(fā)布會(huì)上,官方該機(jī)將搭載搭載天璣9200+處理器,安兔兔V10跑分超177萬(wàn)分,是目前安卓陣營(yíng)最高的分?jǐn)?shù)
  • 一年經(jīng)驗(yàn)在二線城市面試后端的經(jīng)驗(yàn)分享

    忠告這篇文章只適合2年內(nèi)工作經(jīng)驗(yàn)、甚至沒(méi)有工作經(jīng)驗(yàn)的朋友閱讀。如果你是2年以上工作經(jīng)驗(yàn),請(qǐng)果斷劃走,對(duì)你沒(méi)啥幫助~主人公這篇文章內(nèi)容來(lái)自 「升職加薪」星球星友 的投稿,坐
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過(guò)這樣的問(wèn)題:移動(dòng)設(shè)備上有一個(gè)固定元素,當(dāng)激活虛擬鍵盤時(shí),該元素被隱藏在了鍵盤下方?多年來(lái),這一直是 Web 上的默認(rèn)行為,在本文中,我們將探討這個(gè)問(wèn)題、為什么會(huì)發(fā)生
  • JVM優(yōu)化:實(shí)戰(zhàn)OutOfMemoryError異常

    一、Java堆溢出堆內(nèi)存中主要存放對(duì)象、數(shù)組等,只要不斷地創(chuàng)建這些對(duì)象,并且保證 GC Roots 到對(duì)象之間有可達(dá)路徑來(lái)避免垃 圾收集回收機(jī)制清除這些對(duì)象,當(dāng)這些對(duì)象所占空間超過(guò)
  • Temu起訴SHEIN,跨境電商戰(zhàn)事升級(jí)

    來(lái)源 | 伯虎財(cái)經(jīng)(bohuFN)作者 | 陳平安日前據(jù)外媒報(bào)道,拼多多旗下跨境電商平臺(tái)Temu正對(duì)競(jìng)爭(zhēng)對(duì)手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場(chǎng)支配力量強(qiáng)迫服裝廠商與之簽訂獨(dú)家
  • 疑似小米14外觀設(shè)計(jì)圖曝光:后置相機(jī)模組變化不大

    下半年的大幕已經(jīng)開(kāi)啟,而誰(shuí)將成為下半年手機(jī)圈的主角就成為了大家關(guān)注的焦點(diǎn),其中被傳有望拿下新一代驍龍8 Gen3旗艦芯片的小米14系列更是備受大家矚
  • 聯(lián)想小新Pad Pro 12.6將要推出,搭載高通驍龍 870 處理器

    聯(lián)想小新Pad Pro 12.6將于秋季新品會(huì)上推出,官方按照慣例直接在發(fā)布會(huì)前給出了機(jī)型的所有參數(shù)。聯(lián)想小新 Pad Pro 12.6 將搭載高通驍龍 870 處理器,重量為 5
  • 最薄的14英寸游戲筆記本電腦 Alienware X14已可以購(gòu)買

    2022年1月份在國(guó)際消費(fèi)電子展(CES2022)上首次亮相的Alienware新品——Alienware X14現(xiàn)在已經(jīng)可以購(gòu)買了,這款筆記本電腦被譽(yù)為世界上最薄的 14 英寸游戲筆
Top