IntelliJ IDEA 2019.2ヘルプ

@Contract

@Contract 注釈は、メソッドが満たす必要がある契約を定義するために使用されます。これにより、注釈を付けたメソッドを呼び出すメソッドでIDEが問題を見つけることができます。この注釈は、独自のコードに注釈を付けるだけでなく、他の既存のライブラリーにも使用できます。

@Contract 注釈は2つの属性 - valuepureを持ちます。 value 属性には、引数と戻り値の間の因果関係を記述する句が含まれています。

pure 属性は、オブジェクトの状態を変更せずに新しい値を返すメソッドを対象としています。その戻り値が使用されない場合、メソッド呼び出しが例外をスローしない限り(例外は副作用とはみなされない限り)、呼び出しを除去してもプログラムの状態に影響を与えたり、セマンティクスを変更することはありません。

メソッドが単独で副作用を発生しない場合、メソッドは純粋なものとしてマークするべきではありませんが、別のスレッドで行われた変更が現在のもので可視になるように、このメソッドを呼び出した後のスレッド一方、同期化の目的は、別のスレッドのイベントを待つのではなく、コレクションの内部の整合性を保持するためです。重要なプログラムのセマンティクスに影響を与えない「見えない」副作用(ログなど)は許されます。

契約とは、入力と出力を記述する句の集合です。それらは -> シンボル "A -> B"で区切られています。これは、Aをメソッドに提供するとBを得るという意味での契約を形成します。契約内の句は、; (セミコロン)記号で区切らなければなりません。たとえば:

@Contract("_, null -> null")

2番目の引数が nullの場合、このメソッドは null を返します。

@Contract("_, null -> null; _, !null -> !null")

このメソッドは、2番目の引数が nullの場合は null を返し、そうでない場合はnullになりません。

@Contract("true -> fail")

true が渡された場合に例外をスローする典型的な assertFalse() メソッド。

@Contract("_ -> this")

このメソッドは常にその修飾子(たとえば StringBuilder.append)を返します。

@Contract("null -> fail; _ -> param1")

最初の引数がnullの場合、このメソッドは例外をスローします。それ以外の場合は、最初の引数を返します(たとえば、Objects.requireNonNull)。

@Contract("!null, _ -> param1; null, !null -> param2; null, null -> fail")

このメソッドは最初のNULL以外の引数を返すか、または両方の引数がNULLの場合は例外をスローします(たとえば、Java 9の Objects.requireNonNullElse )。

契約を定義する

  1. メソッドで Alt+Enter を押し、メソッド契約を追加するまたはメソッド規約を編集するを選択します。

  2. 契約を設定し、変更を適用します。

    contract annotation lib1

構文

@Contract 注釈値の構文は次のとおりです。

contract ::= (clause ‘;’)* clause
clause ::= args ‘->’ effect
args ::= ((arg ‘,’)* arg )?
arg ::= value-constraint
value-constraint ::= ‘_’ | ‘null’ | ‘!null’ | ‘false’ | ‘true’
effect ::= ‘_’ | ‘null’ | ‘!null’ | ‘false’ | ‘true’ | ‘fail’ | ‘new’ | ‘this’ | ‘param’ number
number ::= [1-9] [0-9]*

制約は次のとおりです。

_

任意の値

null

Null 値

!null

値が静的にnullでないことが証明されました

true

真のブール値

false

Falseブール値

fail

引数が引数の制約を満たす場合、このメソッドは例外をスローします。

new

メソッドが実行されるたびに、メソッド実行前にヒープ内に存在する他のオブジェクトとは異なる非nullの新しいオブジェクトが返されます。メソッドが純粋な場合、新しいオブジェクトはどのフィールドまたは配列にも格納されず、メソッドの戻り値が使用されない場合は失われます。

this

このメソッドはnull以外の this 参照を返します

param1 (param2, param3, and so on)

メソッドは最初の(2番目、3番目など)引数を返します

最終更新日: 2019年8月1日

関連事項

関連ページ:

@Nullableおよび@NotNull

および注釈を使用すると、変数、パラメータ、または戻り値のNULL可否をチェックできます。これらは、メソッド階層全体の契約を制御できます。IntelliJ IDEAに契約違反がある場合、検出された問題を報告し、が発生する可能性のあるコードを指します。例:パラメータに注釈があるメソッドを作成し、このメソ...

@ParametersAreNonnullByDefault

注釈は、注釈で明示的に注釈が付けられていない限り、クラスまたはパッケージ内のすべてのメソッドパラメータが意味論を持つことを定義できます。注釈は、パッケージ、クラス、またはメソッドで使用できます。注釈を使用するには、ライブラリーをモジュールの依存関係に追加します。プロジェクト構造ダイアログを開き、に移...

コード・インスペクション

IntelliJ IDEAには、コンパイル前にプロジェクト内の異常コードを検出して修正する一連のコードインスペクションがあります。IDEはさまざまな問題を見つけて強調表示し、デッドコードを見つけ、可能性のあるバグを見つけ、スペルの問題、コード構造全体を改善することができます。インスペクションは、すべ...

インテンション・アクション

エディターで作業するときに、IntelliJ IDEAはコードを分析し、コードを最適化する方法を検索し、潜在的な問題と実際の問題を検出します。IDEがコードを変更する方法を見つけるとすぐに、エディターの現在行の隣に黄色い電球のアイコンが表示されます。このアイコンをクリックすると、このコード単位に使用...