2012-05-10 18 views
8

XMLStreamReader'u Java 7'de AutoCloseable olarak bulmayı bekledim. Ancak durum böyle değil. StAX okuyucu/yazar arayüzlerinin neden AutoCloseable'u uygulamak için donatılmamış (veya edilmemeli) teknik bir nedeni var mı? Zaten yakın yöntemleri AutoCloseable'un yakın yönteminden farklı olmayan yakın yöntemleri vardır.Neden StAX sınıfları Java 7 için ARM uyarlanmış değildi?

cevap

8

Eğer close() method of AutoCloseable yakın bakarsak:

altta yatan herhangi bir kaynak devretmiş bu kaynağı kapatır. Bu yöntem, try-with-resources ifadesi tarafından yönetilen nesneler üzerinde otomatik olarak çağrılır.

Hatta Closeableclose() method:

bu akışı ve bültenleri onunla ilişkili tüm sistem kaynakları kapatır. Akış zaten kapalıysa, bu yöntemin çağrılmasının bir etkisi yoktur. close() method of XMLStreamReader Oysa

diyor ki:

bu Reader ile ilişkili tüm kaynakları serbest bırakır. Bu yöntem, temel giriş kaynağını kapatmaz.

Aslında giriş kaynağı Closeable arabirimi uygulamak Reader tarafından yönetilir. Yani, numaralı deneme-of-ressource içinde yakın olabilir. Örneğin

:

XMLInputFactory factory = XMLInputFactory.newInstance(); 
    XMLStreamReader reader = null; 
    try (FileReader fr = new FileReader("file.xml")) { //Will close the FileReader 
     reader = factory.createXMLStreamReader(fr); 
     reader.close(); 
    } 
    catch (XMLStreamException ex) { 
     if(reader!=null)try { 
      reader.close(); 
     } catch (XMLStreamException ex1) { 
      Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex1); 
     } 
    } 
+0

Şahsen bu kodu yeniden yapılandırabilirim. Bir istisna meydana geldiğinde reader.close() son olarak bloke edilmiş olmalıdır (yakalamanız sadece XMLStreamException içindir ancak kontrol edilmeyen bir istisna da atabilir.) Ayrıca okuyucuya ait boş çekimi kaldırır ve sadece ikinci düzey Sonunda diğer deneme bloğu içinde deneyin. – Trejkaz

0

onlar bu şeyleri AutoCloseable yapmış olabilir neden hiçbir teknik sebep yoktur. Ben sadece tembelliğe ya da close() olarak adlandırılan yöntemleri aramak için yetersiz zamana iner.