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

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

/*@ invariant array_ != null; */

и объявив его как

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

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

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

1 ответ

Решение

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

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

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

Object[] array = null;

и например

Object[] array_ = { null };

или же

Object[] array_ = { };

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


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

Другие вопросы по тегам