Saya memiliki potongan kode berikut.

Path path = Paths.get(file.getAbsolutePath());
ByteArrayResource resource = null;
try {
    resource = new ByteArrayResource(Files.readAllBytes(path));
} catch (IOException e) {
    // DEAD CODE.
    // file existance is checked by resource manager
}

Apakah ada cara yang lebih baik untuk menangani tangkapan mati? Variabel "file" dimuat oleh manajer sumber daya, yang sudah menangani kasus file tidak ditemukan (dengan melemparkan pengecualian itu sendiri). Ini adalah "kode mati" hanya karena logika aplikasi, jika bukan karena manajer yang melakukan pemeriksaan, ini bukan "kode mati".

Alternatif yang dapat saya pikirkan, adalah membuat DeadCodeException() khusus (memperpanjang RuntimeException()) dan membuangnya setiap kali kasus seperti ini muncul. Ini tidak akan menyebabkan NullPointerException() pada "sumber daya", jika di masa mendatang logika manajer berubah.

Bagaimana saya bisa menangani kasus ini menggunakan standar kode yang baik?

Sunting:

Terima kasih semuanya. Rupanya saya membuat kesalahan di sini. Seperti yang @GenerousBadger dan @RandomCoder_01 katakan, IOExceptionI() bukan FileNotFoundException(), jadi masih bisa dilempar dengan keadaan yang benar (salah?).

Saya akan menggunakan AssertionError() dalam situasi yang sama, untuk yang ini, saya harus menangani pengecualian.

0
datarell 12 Mei 2021, 16:29

1 menjawab

Jawaban Terbaik

Kompiler tidak tahu sebanyak Anda. Itu tidak dapat mengetahui bahwa Anda telah memeriksa bahwa file tersebut ada (dan, tentu saja, file tersebut dapat dihapus di antara pemeriksaan keberadaan dan penggunaan).

Anda harus menunjukkan kepada kompiler (dan pembaca) bahwa semuanya benar-benar rusak jika Anda mencapai titik itu. Cara standar untuk melakukan ini adalah seperti:

} catch (IOException e) {
    throw new AssertionError("Should not reach here, already checked for existence!", e);
}
0
Andy Turner 12 Mei 2021, 13:33