2011-09-02 62 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,則會報告錯誤。如果斷言被禁用,則斷言的評估不會產生任何影響。

和在同一節的討論部分:

因爲斷言可以被禁用,程序不能假定包含在斷言的表達進行評價。因此,這些布爾表達式通常應該沒有副作用: