Java .NET.InglementedException gibi bir şey var mı?


Yanıtlar:


516

26
NotImplementedException Commons Lang 3.0'dan kaldırılmış gibi görünüyor.
Michael Younkin

13
UnsupportedOperationException koleksiyon çerçevesinin bir parçası olduğundan, yalnızca Koleksiyonlar conext kullanılırsa kullanılmalıdır. Aksi takdirde bir RuntimeException kullanılmalıdır. docs.oracle.com/javase/7/docs/technotes/guides/collections/…
L.Butz

9
@LeonardButz Bu java.lang sitesinden geliyor: docs.oracle.com/javase/1.5.0/docs/api/java/lang/…
Ravi

5
@RaviWallau Bunu gördüm: docs.oracle.com/javase/7/docs/api/java/lang/… Bu sınıfın Java Collection Framework üyesi olduğu anlamına geliyor.
L. Butz

3
Commons Lang 3.2'de okundu
qwertzguy

289

Bence java.lang.UnsupportedOperationExceptionaradığınız şey bu.


28
Çok farklı bir şey olduğunu söylüyorum. NIE ayrıca henüz uygulanmayabileceğini söylüyor, UOE bana asla olmayacağını söylüyor ...
Dykam

5
@Dykam, o zaman bir NotImplementedYetException olmaz mı?
Yishai

106
@Dykam: new UnsupportedOperationException("Not implemented yet")- mutlu mu?
Michael Borgwardt

3
Daha kötü olduğu anlamına gelmiyordum, sadece farklı bir kullanım durumu vardı.
Dykam

6
yeni UnsupportedOperationException ("Henüz uygulanmadı") harika bir fikir! :) lang3 bazı nedenlerden dolayı NotImplementedException yok bu yüzden bu harika bir çözüm
ufk

55

Bunu kendiniz yapabilirsiniz (yaptığım şey) - istisna işleme ile uğraşmamak için, sadece RuntimeException'ı genişletirsiniz, sınıfınız şöyle görünebilir:

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}

Bir mesaj alacak şekilde genişletebilirsiniz - ancak yöntemi benim yaptığım gibi kullanırsanız (yani, hatırlatma olarak, hala uygulanacak bir şey olduğunu), genellikle ek mesajlara gerek yoktur.

Sadece bu yöntemi kullandığımı söylemeye cesaret ediyorum, bir sistem geliştirme sürecindeyken hangi yöntemlerin hala doğru bir şekilde uygulanmadığını izlememi kolaylaştırıyor :)


3
Bu çözümü en çok sevdim, çünkü bunun için özel bir hata işleyicisine sahip olmak kolaydır, NotImplementedException yapıcısına tüm referansları bularak aramak kolaydır ve sadece birkaç kod satırıdır. Ancak kendi dosyasıyla yeni bir sınıf ilan etmek biraz sakıncalıdır.
D Coetzee

1
Katılıyorum. Bu UnsupportedOperationExceptionbence kullanmaktan daha iyidir . Şimdi, sadece Java bunu özel istisna kütüphanesine ekleseydi!
ezmek

12

Belirtildiği gibi, JDK'nın yakın bir eşleşmesi yoktur. Ancak, ekibimin zaman zaman böyle bir istisna için de kullanımı vardır. UnsupportedOperationExceptionDiğer yanıtlar tarafından önerildiği gibi gidebilirdik , ancak temel kitaplığımızda kurucuları kaldırmış özel bir istisna sınıfını tercih ediyoruz:

public class NotYetImplementedException extends RuntimeException
{
    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException()
    {
    }

    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException(String message)
    {
        super(message);
    }
}

Bu yaklaşımın aşağıdaki faydaları vardır:

  1. Okuyucular NotYetImplementedExceptiongördüklerinde, bir uygulamanın planlandığını ve unutulduğunu veya hala devam ettiğini bilirler, oysa UnsupportedOperationException( toplama sözleşmeleri doğrultusunda ) hiçbir şeyin uygulanmayacağını söyler. Bu yüzden sınıf adında "henüz" kelimesi var. Ayrıca, bir IDE çağrı sitelerini kolayca listeleyebilir.
  2. Her çağrı sitesindeki kullanımdan kaldırma uyarısıyla, IDE'niz ve statik kod analiz aracınız, size hala bir şeyler uygulamanız gerektiğini hatırlatabilir. (Kullanımdan kaldırmanın bu şekilde kullanımı bazılarına yanlış gelebilir, ancak aslında kullanımdan kaldırma, kaldırmanın duyurulmasıyla sınırlı değildir .)
  3. Yapıcılar sınıftan değil, kullanımdan kaldırılmıştır. Bu şekilde, importhatta değil, uygulanması gereken yöntemin içinde bir kullanımdan kaldırma uyarısı alırsınız (JDK 9 bunu düzeltti ).

8

Hayır yok ve muhtemelen yok, çünkü bunun için çok az geçerli kullanım var. Kullanmadan önce iki kez düşünürdüm. Ayrıca, kendinizi yaratmak gerçekten kolaydır.

Lütfen neden .NET'te bile olduğu hakkında bu tartışmaya bakın .

UnsupportedOperationExceptionOperasyonun henüz uygulanmadığını, hatta desteklenmediğini söylese de sanırım yaklaşıyor. Bu, geçerli bir uygulamanın mümkün olmadığı anlamına gelebilir. Operasyon neden desteklenmiyor? Orada olmalı mı? Arayüz ayrımı veya Liskov ikame sorunları belki?

Devam etmekte olan bir çalışma için gidersem ToBeImplementedException, ama kendimi hiçbir zaman somut bir yöntem tanımlarken yakalayamadım ve bunu o kadar uzun süre üretime bıraktım ve böyle bir istisnaya ihtiyaç olacaktı.

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.