JML не нулевые варианты? - PullRequest
       24

JML не нулевые варианты?

2 голосов
/ 05 декабря 2010

У меня есть вопросы JML. в чем разница между

/*@ invariant array_ != null; */

и объявив его

protected /*@ non_null */ Object[] array_;

относительно элементов array_? Какое свойство имеет для них в каждом случае?

Заранее спасибо.

1 Ответ

2 голосов
/ 05 декабря 2010

относительно элементов array_? Какое свойство имеет для них в каждом случае?

Ничего не сказано об элементах. Гарантируется только то, что ссылка array_ не равна нулю.

Обратите внимание на разницу между

Object[] array = null;

и, например,

Object[] array_ = { null };

или

Object[] array_ = { };

Первая строка будет нарушать инвариант, в то время как последние две будут разрешены, поскольку array_ будет указывать на фактический массив (даже если этот массив может содержать только нулевые элементы или даже вообще не содержать элементов).


Другое отличие состоит в том, что в подходе invariant array_ != null; array_ != null должен удерживаться только после каждого метода, в то время как при использовании non_null прагма array_ != null должна удерживаться в каждой контрольной точке всей программы.

...