JML не нулевые варианты?
-
08-10-2019 - |
Вопрос
У меня есть вопросы 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
Должен держать в каждой контрольной точке по всей программе.