2017-02-09 9 views
4

私は頻繁にこのようなコードがあります:IntelliJのヌルチェックの警告

if (!hasValue()) throw... 
return value.toString(); 

その後、IntelliJの可能について私に警告します:

protected @Nullable Value value; 

public boolean hasValue() { return value != null; } 

をこれに伴う問題は、私はそうのようなヌルチェックを行うときということですNPE

if (value != null) throw... 
return value.toString(); 
のに対し、

はこの警告を回避します。

私のhasValue()メソッドを飾る方法があるので、IntelliJはnullチェックをしていることを知っていますか?警告は表示されませんか?

+0

は本当に簡単な 'hasValue'ですか? –

+2

'@suppresswarnings(nullcheck)'アノテーションはどうですか? – ochi

+0

@SotiriosDelimanolisはい – ycomp

答えて

1

Intellij-Jetbrainsは非常に賢いIDEであり、多くの問題を解決する方法を提案しています。

下記のスクリーンショットをご覧ください。これは、この警告を削除するための5つの方法を示唆しています。

1)add assert value != null; return value != null ? value.toString() : null;

3)

if (value != null) { 
     return value.toString(); 
    } 

4で囲んで)return文を置き換える解説追加することによって、この特定の文の検査を抑制

2):

//noinspection ConstantConditions 
return value.toString(); 

5)を追加し、少なくとも以前のように、メソッドまたはクラス全体で使用できるアノテーションを使用することを推奨していたので、@SuppressWarnings("ConstantConditions")を使用するように提案しました。

このコンテキストメニューを呼び出すには、ショートカットキーAlt+Enter(私はすべてのOSに共通すると思います)を使用してください。

enter image description here

+0

これらの技術はすべて、IntelliJが警告を発行するのを実際に防ぎます。しかし、「IntelliJはそれが[hasValue]がnullチェックを行うことを知っている」ことを保証するという元の質問には答えません。 他のいくつかのツールでは、より洗練されたコード分析が行われ、事後のアノテーション['@ EnsuresNonNullIf'](https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/EnsuresNonNullIf.html)がサポートされていますポスターが尋ねられましたが、残念ながらIntelliJは現在そうしていません。 – mernst