Apa pengecualian standar untuk membuang di Jawa untuk operasi yang tidak didukung / diimplementasikan?


308

Secara khusus, adakah Exceptionsubclass standar yang digunakan dalam keadaan ini?


Apakah pantas untuk digunakan ketika kelas tidak mengimplementasikan metode, tetapi kelas anak dapat melakukannya? Dengan kata lain, memiliki metode abstrak dalam kelas non-abstrak.
Osa

@SergeyOrshanskiy Berguna untuk kapan, tergantung pada bagaimana Anda membangun objek, Anda perlu membuat kelas anonim yang mengimplementasikan antarmuka untuk membuat instance variabel anggota, tetapi Anda tidak ingin itu digunakan. Jika Anda mengaturnya nulldan Anda tidak sengaja menggunakannya (atau orang lain melakukannya) Anda akan mendapatkan NullPointerExceptionsyang kurang jelas daripada UnsupportedOperationExceptionsdalam kasus ini. Contoh saja.
2rs2ts

Jawaban:


438

java.lang.UnsupportedOperationException

Dilemparkan untuk menunjukkan bahwa operasi yang diminta tidak didukung.


4
@JarrodRoberson OK, pernyataan itu harus benar-benar dihapus dari dokumentasi kelas dalam kasus itu. Pengecualian tampaknya digunakan oleh paket lain. Saya kira jika Oracle melakukannya, maka kita juga harus melakukannya. Saya akan mengajukan laporan bug.
Maarten Bodewes

1
Sadarilah ini tidak dicentang RuntimeException . Anda tidak akan mendapatkan umpan balik atau bantuan dalam menangani pengecualian ini selama waktu kompilasi. Jika ini digunakan untuk metode stubbed atau work-in-progress, Anda harus menggunakan semacam pengecualian yang diperiksa .
TastyWheat

221

Bedakan antara dua case yang Anda beri nama:

  • Untuk menunjukkan bahwa operasi yang diminta tidak didukung dan kemungkinan besar tidak akan pernah, melempar UnsupportedOperationException.

  • Untuk mengindikasikan operasi yang diminta belum dilaksanakan, pilih di antara ini:

    1. Gunakan NotImplementedExceptiondari apache commons-lang yang tersedia di commons-lang2 dan telah ditambahkan kembali ke commons-lang3 dalam versi 3.2.

    2. Terapkan sendiri NotImplementedException.

    3. Lempar sebuah UnsupportedOperationExceptionpesan seperti "Belum diimplementasikan,".


1
Saya setuju dengan ini, karena tampaknya masuk akal bagi saya. "Namun" atau "tidak pernah" yang ditunjukkan oleh Pengecualian memberikan gagasan tentang bagaimana bereaksi terhadap ini.
sschrass

3
# 1 atau 2 sangat disukai dalam praktek. # 3 memang menangkap perbedaan semantik antara "tidak didukung" dan "tidak diterapkan", tetapi memiliki kelas yang terpisah membuatnya lebih mudah untuk melakukan pencarian cepat untuk memverifikasi bahwa Anda belum lupa untuk mengimplementasikan apa pun yang Anda harus lakukan sebelum melakukan.
Sean U

4
# 3 adalah yang terbaik untuk metode yang tidak diimplementasikan karena tidak memerlukan perpustakaan pihak ketiga atau pekerjaan tambahan, bahkan jika itu adalah milik bersama.
JoshDM

28

Jika Anda membuat fungsi baru (belum diimplementasikan) di NetBeans , maka itu menghasilkan tubuh metode dengan pernyataan berikut:

throw new java.lang.UnsupportedOperationException("Not supported yet.");

Oleh karena itu, saya merekomendasikan untuk menggunakan UnsupportedOperationException .


14

Jika Anda menginginkan lebih banyak rincian dan dekripsi yang lebih baik, Anda dapat menggunakan NotImplementedException dari commons-lang

Peringatan: Hanya tersedia sebelum versi 2.6 dan setelah versi 3.2.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.