Quoth the Javadoc :
Streaming memiliki metode BaseStream.close () dan mengimplementasikan AutoCloseable, tetapi hampir semua contoh aliran tidak perlu ditutup setelah digunakan. Secara umum, hanya stream yang sumbernya adalah saluran IO (seperti yang dikembalikan oleh Files.lines (Path, Charset)) akan memerlukan penutupan. Sebagian besar stream didukung oleh koleksi, array, atau fungsi pembangkit, yang tidak memerlukan manajemen sumber daya khusus. (Jika streaming memang membutuhkan penutupan, itu dapat dinyatakan sebagai sumber daya dalam pernyataan coba-dengan-sumber daya).
"Hampir semua" dan "umumnya" tidak jelas - jika Anda menulis perpustakaan dan mengabstraksi sumber Stream Anda dari pengguna Stream itu, maka Anda selalu harus bertanya pada diri sendiri pertanyaan - "haruskah saya menutup ini?" Streaming yang didukung IO perlu ditutup karena operasi terminal tidak menelepon close
, jadi secara efektif saya selalu harus mengingat / mendokumentasikan dari mana aliran saya berasal, atau saya harus selalu melakukannya close
.
Pilihan nuklir yang saya kira adalah tidak mengembalikan Streaming dari metode atau menerima parameter Stream, yang merupakan sentimen yang telah digaungkan oleh beberapa orang di tim JDK. Saya menemukan bahwa terlalu membatasi mempertimbangkan manfaat praktis dari Streaming.
Apa praktik terbaik Anda saat menutup Streaming? Saya mencari online untuk jawaban ini dari beberapa orang JDK yang biasanya aktif pada pertanyaan komunitas yang serupa, tetapi tidak menemukan sesuatu yang relevan.