验证方法调用的顺序

时间:2016-09-25 12:58:03

标签: java

名为OutgoingItems的类有两种方法:getNextItem()hasItems()

在当前的实现getNextItem()中,hasItems() == true正在进入无限循环。

有没有办法在代码中验证除非首先检查hasItems() == true的条件,否则不会调用此方法?

可能是静态分析的某种相关注释? 假设实施变化很难,而且人们不能做出改变。

1 个答案:

答案 0 :(得分:0)

你所描述的内容听起来很奇怪,除非getNextItem()

无论如何,这个想法是相同的,无论你的逻辑是什么工作方式:将你的hasItems()对象包装到一个新的类中,为你检查条件。我使用OutgoingItems进行了检查,但您可以选择任何您喜欢的方式。

assert

使用此解决方案当然可能需要付出轻微的性能和空间开销,理想的解决方案是修复public class OutgoingItemsDelegate { private final OutgoingItems items; public OutgoingItemsDelegate(OutgoingItems items) { this.items = items; } public boolean hasItems() { return items.hasItems(); } public Object getNextItem() { assert !items.hasItems(); // alternatively you can do this: // if (items.hasItems()) throw new IllegalStateException("hasItems() must not be true"); return items.getNextItems(); } } 本身,但如果失败,那么这是一个可行的选择。

*请注意,对于要评估的OutgoingItems语句,您需要在命令行上使用assert标志。