第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

當(dāng) lambda 可能返回 null 時(shí),如何讓 IntelliJ IDEA 發(fā)出警告?

當(dāng) lambda 可能返回 null 時(shí),如何讓 IntelliJ IDEA 發(fā)出警告?

BIG陽 2023-03-31 10:00:09
IntelliJ IDEA Constant conditions & exceptions和Return of 'null'中有非常有用的代碼檢查。當(dāng)沒有注釋的方法@Nullable返回時(shí),它們會(huì)顯示警告,方法、字段或變量null的結(jié)果可能計(jì)算為。@Nullable@Nullablenull不幸的是,這不適用于 lambda 表達(dá)式。nullIntelliJ IDEA 只是忽略了它們可能的返回。但我很確定有一種方法可以制作用于結(jié)構(gòu)搜索檢查的搜索模板,它將找到所有可能從 lambda 表達(dá)式返回的內(nèi)容。null到目前為止,我已經(jīng)設(shè)法制作了一個(gè)模板,它找到了對(duì)方法和模板的引用,該模板使用接受通用參數(shù)并將其返回的@Nullable方法包裝單行 lambda ,它不會(huì)更改代碼語義并在 lambda 可能返回 null 時(shí)顯示警告@NotNull.這是我的模板:可為空的方法:@Nullable$MethodType$ $Method$($ParameterType$ $Parameter$);可空方法引用$Qualifier$::$Method$//Filters for $Method$:reference = Nullable methods具有未經(jīng)檢查結(jié)果的 Lambda:($Parameter$) -> $Statement$//Filters for $Statement$:text = !warnIfNulltype = !void|Optional|int|boolean|long|char|short|byte//Replace template for $Statement$:WarnUtils.warnIfNull($Statement$)警告工具:@UtilityClasspublic class WarnUtils {    public <T> @NotNull T warnIfNull(@NotNull T t) {        return t;    }}我不知道如何為多行 lambda 制作模板,而且我不喜歡用其他方法包裝所有單行 lambda。我認(rèn)為腳本過濾器可能會(huì)有所幫助,但我不知道如何檢查__context__lambda 是否可能返回 null。
查看完整描述

1 回答

?
慕運(yùn)維8079593

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊

這個(gè)問題可以在沒有額外代碼檢查的情況下解決,只需使用@NotNull在其抽象方法上有注釋的功能接口。


例如,如果您需要一個(gè)不能返回 null 的供應(yīng)商,您可以使用此接口:


@FunctionalInterface

public interface NotNullSupplier<T> {

    @NotNull

    T get();

}

如果您嘗試從這種類型的 lambda 表達(dá)式返回 null,Constant conditions & exceptions或Return of 'null' code inspection 將檢測到它:


NotNullSupplier<Integer> supplier = () -> null; // warning - 'null' is returned by the method declared as @NotNull

我想注意使用Supplier<@NotNull T>可能會(huì)導(dǎo)致提到的代碼檢查的不正確行為(它一定是一個(gè)錯(cuò)誤,可能會(huì)在以后修復(fù))。這是此類行為的示例:


Supplier<@NonNull Integer> supplier = () -> null; // no warnings

Integer result = supplier.get();

if(result != null) // warning - Condition 'result != null' is always 'true'

    result++;

常量條件和異常代碼檢查建議“展開‘if’語句”,在這種情況下遵循此建議將導(dǎo)致NullPointerException.


為避免此類錯(cuò)誤,您可以將以下搜索模板添加到結(jié)構(gòu)搜索檢查中:


//Search template:

Supplier<@NotNull $T$>

//Replace template:

NotNullSupplier<$T$>

//Search template:

Function<$T$, @NotNull $R$>

//Replace template:

NotNullFunction<$T$, $R$>

//Search template:

BiFunction<$T$, $U$, @NotNull $R$>

//Replace template:

NotNullBiFunction<$T$, $U$, $R$>


查看完整回答
反對(duì) 回復(fù) 2023-03-31
  • 1 回答
  • 0 關(guān)注
  • 227 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)