Java assert отключает выполнение Map.remove()
Привет я пытался удалить объект из карты, и я тестировал эту операцию с помощью assert
// 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?
1 ответ
assert
операторы либо выполняются, либо не зависят от того, как вы запускаете виртуальную машину. Не следует ставить побочные эффекты в утверждениях.
Из раздела 14.10 Спецификации языка Java:
Утверждение либо включено, либо отключено. Если утверждение включено, оценка утверждения вызывает оценку логического выражения, и появляется сообщение об ошибке, если выражение оценивается как ложное. Если утверждение отключено, оценка утверждения не оказывает никакого влияния.
и в дискуссионной части того же раздела:
Поскольку утверждения могут быть отключены, программы не должны предполагать, что выражения, содержащиеся в утверждениях, будут оценены. Таким образом, эти логические выражения, как правило, не должны иметь побочных эффектов: