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
должен удерживаться в каждой контрольной точке на протяжении всей программы.