2012-05-10 14 views
8

XMLStreamReaderがJava 7でAutoCloseableであると予想されましたが、そうではありません。 AutoCloseableを実装するためにStAXリーダー/ライターインターフェイスが改造されていない(またはすべきではない)技術的な理由はありますか?彼らはすでにcloseメソッドを持っていますが、その目的はcloseメソッドのAutoCloseableと変わりません。Java 7でStAXクラスがARM用にレトロフィットされていない理由

答えて

8

あなたはclose() method of AutoCloseableに近い見てみると:

は、任意の基礎となるリソースを放棄、このリソースを閉じます。このメソッドは、try-with-resourcesステートメントで管理されているオブジェクトで自動的に呼び出されます。

あるいはCloseableclose() method

はこのストリームを解放、それに関連するすべてのシステムリソースを閉じます。ストリームがすでに閉じられている場合、このメソッドを呼び出すことは効果がありません。 close() method of XMLStreamReader一方

は言う:

は、このリーダーに関連付けられたリソースを解放します。 このメソッドは基本となる入力ソースを閉じません。

実際の入力ソースがCloseableインタフェースを実装Readerによって管理されます。だから、try-with-ressourceに近い読者です。例えば

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

私は個人的にそのコードを再構築します。例外が発生した場合はfinallyブロックにreader.close()を入れる必要があります(catchはXMLStreamExceptionのみですが、チェックされていない例外もスローできます)。 try-finallyを他のtryブロックの中に入れます。 – Trejkaz

0

彼らはこれらの事をAutoCloseable作っていなかった理由技術的な理由はありません。私はそれがちょうど怠惰になるか、close()と呼ばれるメソッドを探すのに不十分な時間になると考えています。

関連する問題