Вопрос

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

/*@ invariant array_ != null; */

и объявляя это как

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

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

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

Это было полезно?

Решение

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

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

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

Object[] array = null;

и например

Object[] array_ = { null };

или

Object[] array_ = { };

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


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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top