2011-09-02 36 views
1

您好我试图从地图除去对象和我测试使用断言爪哇断言禁用Map.remove的执行()

// definition of map 
private Map<String, Map<Long, Object>> groups = new HashMap<String, Map<Long, Object>>(); 

// this does not remove item from map 
assert groups.get("key").remove(id) != null; 

// this removes item from map 
groups.get("key").remove(id); 

前述方法上相同的数据进行了测试此操作。为什么Map.remove()不能用于assert?

+0

您是否启用了'assert's? –

+0

确保启用了断言(在启动JVM时提供了'-ea'开关) – aioobe

回答

7

assert根据您启动虚拟机的方式执行或不执行语句。您应该而不是将断言的副作用。

section 14.10 of the Java Language Specification

断言是启用或禁用。如果启用了断言,断言的评估会导致评估布尔表达式,并且如果表达式计算结果为false,则会报告错误。如果断言被禁用,则断言的评估不会产生任何影响。

和在同一节的讨论部分:

因为断言可以被禁用,程序不能假定包含在断言的表达进行评价。因此,这些布尔表达式通常应该没有副作用: