Was ist die Standardausnahme für Java für nicht unterstützte / implementierte Vorgänge?

308

ExceptionGibt es unter diesen Umständen insbesondere eine Standardunterklasse ?

Krishna Kumar
quelle
Ist es angemessen zu verwenden, wenn eine Klasse keine Methode implementiert, untergeordnete Klassen dies jedoch möglicherweise tun? Mit anderen Worten, eine abstrakte Methode in einer nicht abstrakten Klasse zu haben.
osa
@SergeyOrshanskiy Dies ist nützlich, wenn Sie abhängig davon, wie Sie ein Objekt erstellen, eine anonyme Klasse erstellen müssen, die eine Schnittstelle implementiert, um eine Mitgliedsvariable zu instanziieren, diese jedoch nicht verwenden soll. Wenn Sie es auf einstellen nullund es versehentlich verwenden (oder jemand anderes), erhalten Sie NullPointerExceptionsweniger offensichtliche als UnsupportedOperationExceptionsin diesem Fall. Nur ein Beispiel.
2rs2ts

Antworten:

438

java.lang.UnsupportedOperationException

Wird ausgelöst, um anzuzeigen, dass die angeforderte Operation nicht unterstützt wird.

dfa
quelle
4
@JarrodRoberson OK, diese Anweisung sollte in diesem Fall wirklich aus der Klassendokumentation entfernt werden. Die Ausnahme scheint von anderen Paketen verwendet zu werden. Ich denke, wenn Oracle dies tut, sollten wir es auch tun. Ich werde einen Fehlerbericht einreichen.
Maarten Bodewes
1
Beachten Sie, dass dies nicht aktiviert ist RuntimeException . Während der Kompilierungszeit erhalten Sie keine Rückmeldung oder Unterstützung bei der Behandlung dieser Ausnahmen. Wenn dies für eine Stub - Methode verwendet wird , oder ein Work-in-progress sollten Sie eine Art verwenden geprüft Ausnahme.
TastyWheat
221

Unterscheiden Sie zwischen den beiden von Ihnen genannten Fällen:

  • Um anzuzeigen, dass die angeforderte Operation nicht unterstützt wird und höchstwahrscheinlich niemals unterstützt wird, werfen Sie eine UnsupportedOperationException.

  • Wählen Sie Folgendes aus, um anzuzeigen, dass die angeforderte Operation noch nicht implementiert wurde:

    1. Verwenden Sie die Datei NotImplementedExceptionfrom apache commons-lang, die in commons-lang2 verfügbar war und in Version 3.2 erneut zu commons-lang3 hinzugefügt wurde.

    2. Implementieren Sie Ihre eigenen NotImplementedException.

    3. Wirf eine UnsupportedOperationExceptionmit der Meldung "Noch nicht implementiert".

steffen
quelle
1
Ich gehe damit um, weil es mir vernünftig erscheint. "Noch" oder "Nie" in der Ausnahme gibt eine Vorstellung davon, wie darauf zu reagieren ist.
Sschrass
3
Nr. 1 oder 2 sind in der Praxis sehr vorzuziehen. # 3 erfasst zwar die semantische Unterscheidung zwischen "nicht unterstützt" und "nicht implementiert", aber eine separate Klasse erleichtert die schnelle Suche, um sicherzustellen, dass Sie nicht vergessen haben, etwas zu implementieren, das Sie vor dem Festschreiben implementieren sollten.
Sean U
4
# 3 ist am besten für nicht implementierte Methoden geeignet, da keine Bibliothek von Drittanbietern oder zusätzliche Arbeit erforderlich ist, selbst wenn es sich um Commons-Lang handelt.
JoshDM
28

Wenn Sie in NetBeans eine neue (noch nicht implementierte) Funktion erstellen , wird ein Methodenkörper mit der folgenden Anweisung generiert:

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

Daher empfehle ich die Verwendung der UnsupportedOperationException .

Benny Neugebauer
quelle
14

Wenn Sie mehr Granularität und eine bessere Beschreibung wünschen, können Sie NotImplementedException von commons-lang verwenden

Warnung: Nur vor Version 2.6 und nach Version 3.2 verfügbar.

Guillaume
quelle