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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top