JML pas null variantes?
-
08-10-2019 - |
Question
J'ai une question JML. Quelle est la différence entre
/*@ invariant array_ != null; */
et le déclarant comme
protected /*@ non_null */ Object[] array_;
en ce qui concerne les éléments de array_? Quels sont les biens détient pour eux dans chaque cas?
Merci à l'avance.
La solution
en ce qui concerne les éléments de array_? Quels sont les biens détient pour eux dans chaque cas?
On ne dit rien sur les éléments. La seule chose qui est garanti est que la référence array_
n'est pas nulle.
Notez la différence entre
Object[] array = null;
et par exemple
Object[] array_ = { null };
ou
Object[] array_ = { };
La première ligne serait contraire à l'invariant, alors que les deux derniers seraient autorisés, comme array_
rappelle à un réseau réel (même si ce réseau ne peut contenir que des éléments nuls ou même aucun élément du tout).
Une autre différence est que dans l'approche invariant array_ != null;
, array_ != null
ne doit tenir avant après chaque méthode, alors que si vous utilisez le non_null
de pragma array_ != null
doit tenir à chaque point de contrôle tout au long du programme.