В документации Java метода close () java.lang.AutoCloseable говорится
Обратите внимание, что в отличие от
close()
метод Closeable, этотclose()
метод не должен быть идемпотентным. Другими словами, вызов этого метода close более одного раза может иметь некоторый видимый побочный эффект, в отличие отCloseable#close()
, который требуется, чтобы не оказывать никакого эффекта, если вызывается более одного раза. Однако разработчикам этого интерфейса настоятельно рекомендуется сделать свои близкие методы идемпотентными.
Что они подразумевают под методом идемпотент и каковы побочные эффекты двойного вызова этого close()
метода?
И поскольку интерфейс Closeable
расширяется AutoCloseable
, почему побочные эффекты не проявляются при закрытии Closeable
интерфейса?
public int add(int first, int second) { return first + second; }
Два последующих вызова определенно не изменит состояние программы, поскольку программа даже не меняет свое состояние. Другой примерvoid close() { if (!closed) { file.close(); closed = true; } }
, поскольку он меняет состояние при первом вызове, но состояние остается идентичным при последующих вызовах. - person Edwin Buck   schedule 11.10.2013