Gibt es etwas wie die NotImplementedException von .NET in Java?

541

Gibt es so etwas wie .NET NotImplementedExceptionin Java?

verschlungenes Elysium
quelle

Antworten:

516

Commons Lang hat es. Oder du könntest einen werfen UnsupportedOperationException.

Ravi Wallau
quelle
26
Es scheint, dass NotImplementedException aus Commons Lang 3.0 entfernt wurde.
Michael Younkin
13
Ich denke, da die UnsupportedOperationException Teil des Sammlungsframeworks ist, sollte sie nur verwendet werden, wenn sie im Kontext von Sammlungen verwendet wird. Andernfalls sollte eine RuntimeException verwendet werden. docs.oracle.com/javase/7/docs/technotes/guides/collections/…
L.Butz
9
@ LeonardButz Es kommt von java.lang: docs.oracle.com/javase/1.5.0/docs/api/java/lang/…
Ravi Wallau
5
@ RaviWallau Ich habe Folgendes gesehen: docs.oracle.com/javase/7/docs/api/java/lang/… Es steht fest, dass diese Klasse Mitglied des Java Collection Framework ist.
L.Butz
3
Es wurde in Commons Lang 3.2 gelesen
qwertzguy
289

Ich denke, das java.lang.UnsupportedOperationExceptionist was du suchst.

Chris Dail
quelle
28
Ich sage, es ist etwas ganz anderes. Die NIE sagt auch, dass es möglicherweise noch nicht implementiert ist, wo die UOE mir sagt, dass es niemals wird ...
Dykam
5
@Dykam, wäre es dann nicht eine NotImplementedYetException?
Yishai
106
@ Dykam: new UnsupportedOperationException("Not implemented yet")- glücklich?
Michael Borgwardt
3
Ich meinte nicht, dass es schlimmer war, hatte nur einen anderen Anwendungsfall.
Dykam
6
Die neue UnsupportedOperationException ("Noch nicht implementiert") ist eine großartige Idee! :) in lang3 aus irgendeinem Grund habe ich keine NotImplementedException, also ist dies eine großartige Lösung
ufk
55

Sie können es selbst tun (das habe ich getan) - um sich nicht mit der Ausnahmebehandlung zu beschäftigen, erweitern Sie einfach die RuntimeException, Ihre Klasse könnte ungefähr so ​​aussehen:

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}

Sie können es erweitern, um eine Nachricht aufzunehmen. Wenn Sie die Methode jedoch wie ich verwenden (dh als Erinnerung daran, dass noch etwas implementiert werden muss), sind normalerweise keine zusätzlichen Nachrichten erforderlich.

Ich wage zu sagen, dass ich diese Methode nur verwende, während ich gerade ein System entwickle, was es mir leichter macht, nicht den Überblick zu verlieren, welche Methoden noch nicht richtig implementiert sind :)

Ready4Android
quelle
3
Diese Lösung gefällt mir am besten, weil es einfach ist, einen speziellen Fehlerbehandler dafür zu haben, einfach danach zu suchen, indem alle Verweise auf den NotImplementedException-Konstruktor gefunden werden, und es sind nur ein paar Codezeilen. Es ist jedoch etwas unpraktisch, eine neue Klasse mit einer eigenen Datei deklarieren zu müssen.
D Coetzee
1
Genau. Dies ist UnsupportedOperationExceptionmeiner Meinung nach besser als die Verwendung von . Wenn nur Java dies zur allgemeinen Bibliothek von Ausnahmen hinzufügen würde!
Crush
12

Wie bereits erwähnt, hat das JDK keine enge Übereinstimmung. Mein Team hat jedoch gelegentlich auch eine Verwendung für eine solche Ausnahme. Wir hätten mitmachen können, UnsupportedOperationExceptionwie in anderen Antworten vorgeschlagen, aber wir bevorzugen eine benutzerdefinierte Ausnahmeklasse in unserer Basisbibliothek, die veraltete Konstruktoren enthält:

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);
    }
}

Dieser Ansatz hat folgende Vorteile:

  1. Wenn die Leser sehen NotYetImplementedException, wissen sie, dass eine Implementierung geplant war und entweder vergessen wurde oder noch in Bearbeitung ist, während dies UnsupportedOperationException(im Einklang mit den Inkassoverträgen) gilt ) dass etwas niemals implementiert wird. Deshalb haben wir das Wort "noch" im Klassennamen. Eine IDE kann auch die Anrufstellen leicht auflisten.
  2. Mit der Verfallswarnung an jedem Anrufstandort können Sie mit Ihrem IDE- und statischen Code-Analysetool daran erinnert werden, wo Sie noch etwas implementieren müssen. (Diese Verwendung der Abschreibung mag sich für einige falsch anfühlen, aber in der Tat ist die Abschreibung nicht auf die Ankündigung der Entfernung beschränkt .)
  3. Die Konstruktoren sind veraltet, nicht die Klasse. Auf diese Weise erhalten Sie nur eine Abwertungswarnung innerhalb der zu implementierenden Methode, nicht an der importZeile (JDK 9 hat dies jedoch behoben ).
Jens Bannmann
quelle
8

Nein, gibt es nicht und es ist wahrscheinlich nicht da, weil es nur sehr wenige gültige Verwendungen dafür gibt. Ich würde zweimal überlegen, bevor ich es benutze. Auch ist es in der Tat einfach, sich selbst zu erstellen.

In dieser Diskussion erfahren Sie, warum es überhaupt in .NET ist.

ich vermute UnsupportedOperationException kommt nahe, obwohl es nicht heißt, dass die Operation einfach nicht implementiert ist, aber sogar nicht unterstützt wird. Dies könnte bedeuten, dass keine gültige Implementierung möglich ist. Warum wird die Operation nicht unterstützt? Sollte es überhaupt da sein? Probleme mit der Schnittstellentrennung oder der Liskov-Substitution vielleicht?

Wenn es in Arbeit ist, würde ich mich dafür entscheiden ToBeImplementedException, aber ich habe mich nie dabei ertappt, eine konkrete Methode zu definieren und sie dann so lange zu belassen, bis sie in Produktion geht, und es wäre eine solche Ausnahme erforderlich.

Siebenschläfer
quelle