Java JML后置条件包含类方法调用

Java JML后置条件包含类方法调用,java,contracts,jml,post-conditions,Java,Contracts,Jml,Post Conditions,类方法的JML后置条件是否可以包含对另一个方法调用的调用 例如,我有一门课: public class A { public int doA(x) { ... } public int doB(int x, int y) { ... } } 对于doB的后置条件,我可以有:确保doA(x)=doA(y)?是,前提是调用的方法不包括副作用并且声明为纯: /@pure@/注释表明peek()是一个纯方法。A. 纯方法是一种没有副作用的方法。JML只允许 断言使用纯

类方法的JML后置条件是否可以包含对另一个方法调用的调用

例如,我有一门课:

public class A
{
    public int doA(x)
    { ... }

    public int doB(int x, int y)
    { ... }
}

对于doB的后置条件,我可以有:
确保doA(x)=doA(y)

是,前提是调用的方法不包括副作用并且声明为纯:

/@pure@/注释表明peek()是一个纯方法。A. 纯方法是一种没有副作用的方法。JML只允许 断言使用纯方法。我们声明peek()是纯的,因此它可以 在pop()的后置条件中使用。如果JML允许非纯方法 在断言中,我们可能会无意中编写 有副作用。这可能导致代码在编译时工作 启用了断言检查,但当断言 检查被禁用

public class A
{
    public /*@ pure @*/ int doA(int x)
    { ... }

    //@ requires ...
    //@ ensures doA(x) == doA(y)
    public int doB(int x, int y)
    { ... }
}