Oczekiwalem znalezc XMLStreamReader
jako AutoCloseable
w Javie 7. Jednak tak nie jest. Czy istnieje techniczny powód, dla którego interfejsy czytnika/programatora StAX nie były (lub nie powinny) zostać zmodernizowane w celu wdrożenia AutoCloseable
? Oni już mają bliskie metody, których intencja nie różni się od metody ścisłej z AutoCloseable
.Dlaczego klasy StAX nie zostały zmodernizowane dla ARM w Javie 7
Odpowiedz
Jeśli przyjrzeć się bliżej close()
method of AutoCloseable
:
Zamyka ten zasób, rezygnując żadnych środków zabezpieczających. Ta metoda jest wywoływana automatycznie na obiektach zarządzanych przez instrukcję try-with-resources.
Albo nawet Closeable
close()
method:
Zamyka ten strumień i zwalnia zasoby systemowe związane wszelkie z nim. Jeśli strumień jest już zamknięty, wywołanie tej metody nie ma żadnego efektu.
Podczas gdy close()
method of XMLStreamReader
mówi:
Zwalnia wszelkie zasoby związane z tym Reader. Ta metoda nie powoduje zamknięcia podstawowego źródła sygnału wejściowego.
istocie źródłem sygnału jest zarządzany przez Reader
które implementują interfejs Closeable
. Czytelnik może być blisko w try-with-ressource.
Na przykład:
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);
}
}
Nie ma powodów technicznych nie mogli dokonały te rzeczy AutoCloseable
. Myślę, że to sprowadza się do lenistwa lub niedostatecznego czasu na szukanie metod zwanych close().
- 1. Przekształcenie Stax Źródło w Javie
- 2. ClassValue w Javie 7
- 3. Wnioskowanie typu Java: odniesienie jest niejednoznaczne w Javie 8, ale nie w Javie 7
- 4. Nie można skompilować krzyżowo Mono dla ARM
- 5. Dlaczego nie można rozszerzyć adnotacji w Javie?
- 6. varargs typu klasy w Javie
- 7. Znaczenie 0_0 w Javie 7
- 8. Nie można użyć klasy Scala w Javie
- 9. Uruchamianie plików binarnych ARM dla Androida w systemie Linux ARM
- 10. Anonimowe klasy w PHP 7
- 11. Krzyż kompilacji helloworld dla ARM
- 12. Zastąpienie przestarzałych klasy Hashtable w Javie
- 13. Jak sprawdzić, jakie obiekty zostały zebrane śmieci w Javie?
- 14. Co klasy klasy [B reprezentuje w Javie?
- 15. Dlaczego FileChannel w Javie nie jest blokowany?
- 16. Jakie maszyny wirtualne osadzone w Javie sugerują do rozwoju ARM?
- 17. Używanie klasy "zabronione" w Javie?
- 18. z innej klasy w Javie
- 19. Zmiany w dostępie do zmiennych klas rodzajowych w Javie 7
- 20. Tworzenie klasy węzłów w Javie
- 21. Dlaczego wybrano wersję nie const dla wersji const dla klasy?
- 22. Ładowanie KeyStore w Javie 7 przecieka Classloader
- 23. Dlaczego niektóre pliki nie zostały opublikowane w folderze App_Data?
- 24. StAX i przestrzenie nazw
- 25. Kompilator Ada dla procesorów Arm
- 26. Jak opisać wycofanie klasy w Javie?
- 27. Nie można obniżyć przy użyciu klasy List w Javie
- 28. Korzystanie z operatorem diament w Javie 7
- 29. Jak serializować klasy, które nie zostały zaprojektowane do serializacji?
- 30. jarsigner -verify działa w Javie 6, ale nie w Javie 7
Ja osobiście przebuduję ten kod. reader.close() powinien znajdować się w bloku finally w przypadku wystąpienia wyjątku (twój catch jest tylko dla wyjątku XMLStreamException, ale może również wyrejestrować niesprawdzony wyjątek). Usunąłbym także sprawdzanie, czy czytnik jest pusty i po prostu zagnieździł drugi poziom spróbuj w końcu w drugim bloku try. – Trejkaz