jml nullバリアントではありませんか?
-
08-10-2019 - |
質問
JMLの質問があります。違いは何ですか
/*@ invariant array_ != null; */
そしてそれを宣言します
protected /*@ non_null */ Object[] array_;
array_の要素について?それぞれの場合にどのようなプロパティが保持していますか?
前もって感謝します。
解決
array_の要素について?それぞれの場合にどのようなプロパティが保持していますか?
要素については何も言われていません。保証されている唯一のことは、です array_
参照はヌルではありません。
間の違いに注意してください
Object[] array = null;
そして、たとえば
Object[] array_ = { null };
また
Object[] array_ = { };
最初の行は不変に違反しますが、後者の2つは許可されます。 array_
実際の配列を指します(この配列には、null要素のみが含まれている場合、または要素がまったく含まれていない場合でも)。
もう1つの違いは、です invariant array_ != null;
アプローチ、 array_ != null
各メソッドの後にのみ保持する必要がありますが、 non_null
プラグマ array_ != null
プログラム全体のすべての制御ポイントを保持する必要があります。
所属していません StackOverflow