programing

Java에서 Closeable 인터페이스의 Close() 메서드의 동일성은 어떻게 보장됩니까?

oldcodes 2023. 7. 18. 21:56
반응형

Java에서 Closeable 인터페이스의 Close() 메서드의 동일성은 어떻게 보장됩니까?

Closeable인터페이스는 자바 5에 도입된 반면에AutoCloseable인터페이스는 Java 7과 함께 제공되었습니다.try-with-resources진술. Closeable확장(Java 7 이후)Autocloseable인터페이스

OCA/OCP Java SE 7 - Programmer I & II Study Guide 399페이지에서 다음과 같이 말하고 있습니다.

전화를 걸면 어떻게 됩니까?close()여러 번?사정에 따라 다르겠지.구현하는 클래스의 경우AutoCloseable구현이 동일해야 합니다.그 말은 당신이 전화할 수 있다는 것을 의미합니다.close()하루 종일 아무 일도 일어나지 않을 것입니다. [...] 구현하는 수업의 경우Closeable그런 보장은 없습니다.

그래서 이 텍스트에 따르면, 구현은AutoCloseable동등한 능력이 필요하고, 그리고 그것들.Closeable아닙니다. 이제 docs.oracle.com 에 있는 인터페이스 설명서를 보면 다음과 같이 나옵니다.

참고: 이와 달리close의 방법Closeable이 닫기 방법은 동일한 효력을 가질 필요가 없습니다.다시 말해서, 이것을 부르는 것.close두 번 이상의 방법은 눈에 보이는 부작용이 있을 수 있습니다.Closeable.close두 번 이상 호출할 경우 아무런 영향을 미치지 않아야 합니다.

이것은 책에 쓰여진 것과는 정반대입니다.두 가지 질문이 있습니다.

무엇이 정확합니까?docs.oracle.com 에 있는 의사? 아니면 책?두 인터페이스 중 동일한 성능을 필요로 하는 인터페이스는 무엇입니까?

어떤 것이 동일한 능력을 필요로 하든지 간에 - Java가 동일한 능력을 보장할 방법이 전혀 없다는 것이 제 말이 맞습니까?만약 그렇다면, 다음의 "요건"은close동일한 능력을 갖는 방법은 프로그래머가 해야 하는 것이지만, 나는 인터페이스를 사용하는 누군가가 실제로 그것을 했는지 결코 확신할 수 없습니다, 그렇죠?이 경우 동일성은 단지 오라클의 제안에 불과합니다. 그렇죠?

  1. 오라클의 자바독이 맞습니다.그냥 직감적으로 왜..AutoCloseable개체가 사용됨try(){}(리소스를 사용한 시도라고 함) 블록, 위치close()는 실제로 자동으로 한 번만 호출됩니다. 동시에close()부터Closeable항상 수동으로 호출하는 인터페이스 메서드이며 실수로 두 번 호출하거나 코드를 읽기 쉽게 만들 수 있습니다.추가로 -Closeable확장된AutoCloseable그리고 그것은 계약을 맺어서는 안 됩니다.close()의 방법.AutoCloseable약하면 요구사항만 추가할 수 있습니다.그래서 추상적인 상황은AutoCloseable 수의close()동일한 성능을 발휘하지 못하고 확장 인터페이스가 이 요구 사항을 취소하는 것은 나쁜 설계일 뿐입니다.

  2. 네, 당신의 이해가 맞습니다.프로그래머가 고려해야 할 계약일 뿐입니다.사이의 계약처럼.equals()그리고.hashCode()일관성 없는 방식으로 구현할 수 있으며 컴파일러나 다른 어떤 것도 플래그를 지정하지 않습니다.이 문제는 런타임에서만 발생합니다.

언급URL : https://stackoverflow.com/questions/32425976/how-is-in-java-the-idempotence-of-the-close-method-of-the-closeable-interface

반응형