2012-01-31 37 views
1

即时尝试证明在我的集合中是否存在具有特定状态的对象。我的集合由一个名为getStatus()的方法组成。现在我想证明在这个集合中是否有一个具有给定状态的对象。JML: exists&JMLObjectSequence

@ requires (\exists int i; 0 <= i && i < sizeLimit; orders[i].getStatus().equals(Status.New)); 
public Order getFirstOrder(Status s) 

的问题是订单[我]必须阵列螺母的类型是类型JMLObjectSequence.Is的有没有办法这个序列转换为一个数组,以及如何将语法是什么样子?

另一种方法是(用itemAt(I)):

@ requires (\exists int i; 0 <= i && i < sizeLimit; orders.itemAt(i).getStatus().equals(Status.New)); 

BUT itemAt(i)返回一个对象,它是未订购的类型 - 这样的方法的getStatus()心不是找到。

我很乐意提供一些帮助。那里没有很多例子。

回答

1

如何:

((Order)orders.itemAt(i)).getStatus() 

确认的getStatus()记载为与/ @pure /注释它定义一个纯粹的方法。

public /*@pure*/ Status getStatus(){ ...} 

这应该是有效的。

+0

耶!这对我有效。 – 2012-01-31 09:10:18

+0

是否有可能证明\ result包含序列中给定状态的第一个顺序?也许有更多的订单具有相同的状态... – 2012-01-31 09:31:10