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:

Утверждение либо включено, либо отключено. Если утверждение включено, оценка утверждения вызывает оценку логического выражения, и появляется сообщение об ошибке, если выражение оценивается как ложное. Если утверждение отключено, оценка утверждения не оказывает никакого влияния.

и в дискуссионной части того же раздела:

Поскольку утверждения могут быть отключены, программы не должны предполагать, что выражения, содержащиеся в утверждениях, будут оценены. Таким образом, эти логические выражения, как правило, не должны иметь побочных эффектов:

Другие вопросы по тегам