[英]How to disable "unnecessary test for null" warning in NetBeans 14?
如何禁用 NetBeans 14 IDE 中的“不必要的 null 測試”警告?
NetBeans 作為一個眾所周知的錯誤1 2 3 4它會錯誤地告訴您對null
的測試是不必要的。 例如在以下代碼中:
import javax.validation.constraints.NotNull;
private void doSomething(@NotNull Object o) {
if (o == null) return;
//...do more stuff...
}
IDE認為
o
參數被標記為@NotNull o
o
一定不可能是null
if
語句是不必要的@NotNull注釋只是一個 IDE 提示,不是運行時保證。
null
您可以通過將null
傳遞給doSomething
方法來證明這一點。 (我們甚至可以編寫測試代碼,這樣 IDE 就不會產生任何提示或警告:)
Object o = getTestValue();
doSomething(o);
private Object getTestValue()
{
Object o = null;
return o;
}
private void doSomething(@NotNull Object o) {
Objects.requireNonNull(value);
//...do more stuff...
}
並觀察doSomething
方法失敗 - 因為o
是null
- 即使它被標記為@NotNull 。
現在,可能有@NotNull
的其他實現,或者添加運行時檢查的其他編譯器。 我不是在談論那些。 NetBeans IDE 14 警告是錯誤的,所以我需要禁用它。
但它只提供配置null 尊重警告 -我絕對想保留。
但沒有任何有價值的東西出現:
但這絕對與*對 null 的不必要測試無關。
但它不存在。
但它不存在。
但它不存在。
這讓我想到了我的問題:
您可以使用 Java 注釋@SuppressWarnings("null")
關閉“ Unnecessary test for null ”警告。 該注釋位於java.lang中,不需要導入。
OpenJDK Javadoc for SuppressWarnings for JDK 17 狀態:
指示應在帶注釋的元素(以及帶注釋的元素中包含的所有程序元素)中抑制命名的編譯器警告...作為一種風格,程序員應始終在有效的嵌套最深的元素上使用此注釋. 如果您想在特定方法中抑制警告,您應該注釋該方法而不是它的類。
從鏈接文檔到 Java Language Specification 的第 9.6.4.5 節@SuppressWarnings
似乎完全符合您的要求,我的重點是:
9.6.4.5。 @SuppressWarnings
Java 編譯器越來越有能力發出有用的“類似 lint”的警告。 為了鼓勵使用此類警告,當程序員知道警告不合適時,應該有一些方法可以在程序的一部分中禁用警告。
這是基於 OP 中的示例代碼:
package suppression;
import javax.validation.constraints.NotNull; // Jakarta EE 8
//import jakarta.validation.constraints.NotNull; // Jakarta EE 9
public class Suppression {
public static void main(String[] args) {
Suppression supp = new Suppression();
Object o = supp.getTestValue();
supp.doSomething(o);
supp.doSomething2(o);
}
Object getTestValue() {
Object o = null;
return o;
}
private void doSomething(@NotNull Object o) {
if (o == null) {
System.out.println("Object is null!");
}
}
@SuppressWarnings("null")
private void doSomething2(@NotNull Object o) {
if (o == null) {
System.out.println("Object is null!");
}
}
}
這是 NetBeans 14 中該代碼的屏幕截圖,其中顯示:
doSomething()
中的第 22 行顯示了不需要的警告“對 null 的不必要測試”。@SuppressWarnings("null")
可防止在第 30 行以其他相同的方法doSomething2()
顯示不需要的警告“ Unnecessary test for null ”。答案是:做不到。
NetBeans 無法禁用對 null 警告的不必要測試。
正如其他答案中的其他人所指出的那樣:
解決(不正確)警告的正確方法是混淆對 null 的檢查。
而不是調用:
if (customer == null) { ... }
而是調用:
if (Object.isNull(customer)) { ... }
這是同一件事; 除了這種方式 NetBeans 沒有意識到您正在測試null
的變量,因此不會警告您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.