25 Ağustos 2020 Salı

PREFER TRY-WITH-RESOURCES TO TRY-FINALLY

Merhaba,

Bu yazimda try-with-resources nedir ve neden kullanmaliyiz, onu anlatmaya calisacagim.

Javada  kullanilan bircok resource manuel olarak close() cagrimi ile kapatilmasi gerekiyor. Burada genelde izlenen yol baglantiyi acip try icinde istedigimiz islemi yapip finally de bu connection i close etmektir.

static String firstLineOfFile(String path) throws IOException { 
BufferedReader br = new BufferedReader(new FileReader(path)); 
    try { 
        return br.readLine(); 
    } finally { 
      br.close(); 
    } 
}
Ama bu yontem artik cok tercih edilen bir yontem degildir. Cunku bir tane daha resource eklendiginde yonetimi zorlasacaktir.


static void copy(String src, String dst) throws IOException { 
    InputStream in = new FileInputStream(src); 
    try { 
    OutputStream out = new FileOutputStream(dst); 
        try { byte[] buf = new byte[BUFFER_SIZE]; 
        int n; 
        while ((n = in.read(buf)) >= 0) 
        out.write(buf, 0, n); 
        } 
        finally { 
            out.close(); 
        } 
    } finally {
     in.close();
    } 
}

Bir de uzerine connection close ederken hata cikarsa onlari da handle etmek gerekir. Yani finally icinde sadece close yapmak yerine tekrar try catch kullanmak gerekir.

Tum bunlardan kurtulmak icin try-with-resources kullanmaliyiz.


static void copy(String src, String dst) throws IOException {
 try (InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dst)) { 
    byte[] buf = new byte[BUFFER_SIZE]; 
    int n; 
    while ((n = in.read(buf)) >= 0)
       out.write(buf, 0, n); 
   } 
}







Yararlandigim kaynak:

Effective Java 3rd Edition

Hiç yorum yok:

Yorum Gönder