【问题标题】:JML not null variants?JML不是空变种?
【发布时间】:2010-12-05 15:10:59
【问题描述】:

我有一个 JML 问题。有什么区别

/*@ invariant array_ != null; */

并将其声明为

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

关于array_的元素?在每种情况下,它们的属性是什么?

提前致谢。

【问题讨论】:

    标签: java arrays null invariants jml


    【解决方案1】:

    关于array_的元素?在每种情况下,它们的属性是什么?

    没有提到元素。唯一可以保证的是array_ 引用不为空。

    注意区别

    Object[] array = null;
    

    例如

    Object[] array_ = { null };
    

    Object[] array_ = { };
    

    第一行将违反不变量,而后两行将被允许,因为array_ 将指向一个实际数组(即使该数组可能只包含空元素甚至根本不包含元素)。


    另一个区别是,在 invariant array_ != null; 方法中,array_ != null 只能在每个方法之后保持,而如果您使用 non_null pragma array_ != null 必须在整个程序的每个控制点保持。

    【讨论】:

    • 嘿 aioobe,也许你也可以告诉我,为什么我会在这里收到 ESC 警告: //@ 确保 \old(x_) != 0 ==> \result == array_[first_];错误是:后置条件可能未建立(后)
    • 实现是什么?
    • 谢谢你,同时修复它! :)
    猜你喜欢
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多