JavaRush /Java Blog /Random-KO /Java 7 리소스 사용 시도
DarthVictor
레벨 28

Java 7 리소스 사용 시도

Random-KO 그룹에 게시되었습니다
버전 7부터 Java는 작업을 마친 후 닫아야 하는 리소스에 대한 향상된 관리 기능을 제공합니다. 이러한 리소스에는 파일, 스트림, 데이터베이스 연결 및 소켓 등이 포함됩니다. 이 목적은 특수 언어 구조 try-with-resources에 의해 제공됩니다. 이 자동 닫기가 작동하기 위해 특별한 인터페이스가 생성되었습니다 AutoCloseable. Java 7 리소스 사용 시도 - 1Java 7에서는 모든 리소스 클래스가 이 인터페이스를 구현합니다. 서명은 다음과 같습니다.
public interface AutoCloseable {
    void close() throws Exception;
}
close()인터페이스는 구문이 제공하는 객체에 대해 자동으로 호출되는 메서드를 선언합니다 try-with-resources. Java 7의 리소스 클래스는 이 인터페이스를 구현하지만 사용하는 라이브러리 중 상당수는 AutoCloseable 인터페이스 와 작동하도록 라이브러리가 아직 업데이트되지 않았거나 단순히 라이브러리를 업데이트할 수 있는 기능이 없기 때문에 그렇지 않습니다. 대부분의 경우 이 문제는 쉽게 해결될 수 있습니다. 에 참여해야 하는 리소스 클래스를 상속합니다 try-with-resources. ITextRenderer(Flying Saucer 프로젝트의) 예를 들어보겠습니다 . 작업을 마친 후에 ITextRenderer는 메소드를 호출해야 합니다 finishPDF(). 일반적으로 이 작업은 블록에서 수행됩니다 finally. ITextRenderer그러나 인터페이스를 확장하고 구현하는 새 클래스를 생성하는 경우 AutoCloseable해당 클래스를 try-with-resources. 새 클래스는 AutoCloseableITextRenderer다음과 같습니다.
public class AutoCloseableITextRenderer extends ITextRenderer implements AutoCloseable {
    @Override
    public void close() {
        super.finishPDF();
    }
}
새 클래스는 여전히 ITextRenderer. 원본 클래스가 로 선언된 경우에는 final컴포지션을 사용해야 합니다. 사용법은 다음과 같습니다.
try (final AutoCloseableITextRenderer iTextRenderer = new AutoCloseableITextRenderer()) {
            ByteArrayOutputStream out; // contains the data to be converted to PDF, not shown here.
            iTextRenderer.setDocumentFromString(new String(out.toByteArray()));
            iTextRenderer.layout();
            iTextRenderer.createPDF(pdfOutputStream);
            pdfOutputStream.flush();
        }
그게 다야. close()의 메서드에서 예외를 발생시키지 않았습니다 AutoCloseableITextRenderer. 인터페이스의 Javadoc에서는 AutoCloseable이에 대해 다음과 같이 설명합니다. 인터페이스 메소드가 예외를 발생시키도록 선언되었지만 이 메소드의 구현자는 메소드를 구현할 때 보다 구체적인 예외 클래스를 사용하거나 메소드가 예외를 발생시킬 수 없는 Exception경우 전혀 예외를 발생시키지 않는 것이 좋습니다. close()실패하다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION