1 回答

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$>
添加回答
舉報(bào)