Java 클래스 중 일부에서는 인스턴스 변수로 선언 된 IO 리소스가 여러 메서드에서 사용되는 것을 볼 수 있습니다. 어떻게 닫을 수 있습니까? 몇 가지 제안 된 finalize() 및 그들은 또한 그것이 권장되지 않는다고 말한다. 이것에 대한 더 나은 접근 방법이 있는지 알 수 있습니까? 예는 :가까운 IO 리소스가 인스턴스 변수로 선언 된 경우 권장되는 방법은 무엇입니까
public class test{
private PrintWriter writer=null;
public test(){
createWriter();
}
public void log(){
writer.write("test");
writer.flush();
}
public void createWriter(){
writer=new PrintWriter(new BufferedWriter(new FileWriter("file")));
}
}
을 닫습니다 다른 모든 Streams 및 Writers가 다른 Streams 및 Writer를 래핑하는 것과 마찬가지로 클래스를 Closeable로 구현하게하고 try-with-resources 문에서 자동으로 호출 할 수있는 close() 메서드를 갖습니다. 물론 문서화하십시오. –
고마워요! 이 문제는 큰 코드 기반을 가진 기존 프로젝트에서 발생합니다. 객체가 생성되는 곳 어디에서나 변경 (try-with 추가)해야합니다. 그렇지 않으면이 설정을 변경하지 않고 닫을 수있는 다른 방법이 있습니다. 수업. – Saikiran
try-with-resources 문을 사용하지 않아도됩니다. 대안은 finally 블록을 닫는 것입니다. 하지만 코드를 변경하지 않고 마술처럼 코드를 close() 할 수있는 방법은 없습니다. –