Bir kurucuda bir InputStream
açarken ve sonra bir süper kurucuya geçirirken kaynakları kullanmaya çalışmak için iyi bir yol var mı? super
yapıcı ilk deyimi olması gerektiğinden elbette bu izin verilmezSüper kurucuyu çağırırken kaynaklar ile çalışın
public class A {
public A(InputStream stream) {
// Do something with the stream but don't close it since we didn't open it
}
}
public class B {
public B(File file) {
// We open the stream so we need to ensure it's properly closed
try (FileInputStream stream = new FileInputStream(file)) {
super(new FileInputStream(file));
}
}
}
Ama:
Temelde ne yapmak istediğinizi budur. Bunu başarmanın iyi bir yolu var mı?
Arayanın giriş akışını 'public B (InputStream in)' konumuna getirmesini ve kapatmasını istiyorum. Türetilmiş sınıfı, temel sınıftan daha az yönlü hale getirmek için bir sebep yok. – EJP
Daha çok yönlü, aynı zamanda daha kullanışsız. Her ikisini de destekleyebilirim, ancak B (Dosya dosyası) yapıcısının bulunmaması bir seçenek değildir. – Raniz
Bana öyle geliyor ki senin sorunun, A'ların yapıcısı içindeki akışı tüketmekten kaynaklanıyor. Durum böyle olmasaydı, akışı bir örnek değişkeninde saklar ve A 'AutoClosable' yapardınız. –