Desteklenmeyen / uygulanan işlemler için Java'ya atmanın standart istisnası nedir?


308

Özellikle, Exceptionbu koşullarda kullanılan standart bir alt sınıf var mı?


Bir sınıf bir yöntem uygulamadığında, ancak alt sınıflar bunu uygularken kullanmak uygun mudur? Diğer bir deyişle, soyut olmayan bir sınıfta soyut bir yönteme sahip olmak.
osa

@SergeyOrshanskiy Bir nesneyi nasıl oluşturduğunuza bağlı olarak, bir üye değişkeni başlatmak için bir arabirim uygulayan anonim bir sınıf oluşturmanız gerektiğinde yararlıdır, ancak bunun kullanılmasını istemezsiniz. Bunu ayarladıysanız nullve yanlışlıkla (veya başka biri yaptı) NullPointerExceptionskullandıysanız, UnsupportedOperationExceptionsbu durumda olduğundan daha az belirgin olanı elde edersiniz . Sadece bir örnek.
2rs2ts

Yanıtlar:


438

java.lang.UnsupportedOperationException

İstenen işlemin desteklenmediğini göstermek için atılır.


4
@JarrodRoberson Tamam, bu ifade gerçekten bu durumda sınıf belgelerinden kaldırılmalıdır. İstisna diğer paketler tarafından kullanılıyor gibi görünmektedir. Sanırım Oracle bunu yaparsa, biz de öyle yapmalıyız. Hata raporu vereceğim.
Maarten Bodewes

1
Bunun kontrol edilmediğini unutmayın RuntimeException . Derleme süresinde bu özel durumları ele alma konusunda geri bildirim veya yardım almayacaksınız. Bu, bir stubbed yöntemi veya devam eden bir çalışma için kullanılıyorsa, bir tür kontrol edilmiş istisna kullanmalısınız.
Lezzetli

221

Adını verdiğiniz iki durum arasında ayrım yapın:

  • İstenen işlemin desteklenmediğini ve büyük olasılıkla asla olmayacağını belirtmek için bir UnsupportedOperationException.

  • İstenen işlemin henüz uygulanmadığını belirtmek için aşağıdakiler arasından seçim yapın:

    1. Kullanım NotImplementedExceptiongelen apache commons-lang commons-ayarınızı LANG2 kullanılabilir ve 3.2 sürümündeki commons-lang3 için yeniden eklendi.

    2. Kendiniz uygulayın NotImplementedException.

    3. UnsupportedOperationException"Henüz uygulanmadı" gibi bir mesajla bir mesaj atın .


1
Bununla gidiyorum, çünkü bu benim için makul görünüyor. İstisna tarafından belirtilen "henüz" veya "asla", buna nasıl tepki verileceği hakkında bir fikir verir.
sschrass

3
Uygulamada #s 1 veya 2 büyük ölçüde tercih edilir. # 3, "desteklenmiyor" ve "uygulanmadı" arasındaki anlamsal ayrımı yakalar, ancak ayrı bir sınıfa sahip olmak, taahhütte bulunmadan önce yapmanız gereken herhangi bir şeyi uygulamayı unuttuğunuzu doğrulamak için hızlı bir arama yapmayı kolaylaştırır.
Sean U

4
# 3, ortak kullanımlı olsa bile, üçüncü taraf kitaplığı veya ek çalışma gerektirmediği için, uygulanmayan yöntemler için en iyisidir.
JoshDM


14

Daha fazla ayrıntı düzeyi ve daha iyi bir açıklama istiyorsanız, commons- lang'den NotImplementedException kullanabilirsiniz

Uyarı: 2.6 sürümünden önce ve 3.2 sürümünden sonra kullanılabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.