421 Stimmen

Was ist die Standardausnahme, die in Java für nicht unterstützte/implementierte Operationen ausgelöst wird?

Gibt es insbesondere einen Standard Exception Unterklasse unter diesen Umständen verwendet?

0 Stimmen

Ist es sinnvoll, sie zu verwenden, wenn eine Klasse eine Methode nicht implementiert, aber untergeordnete Klassen dies tun können? Mit anderen Worten, eine abstrakte Methode in einer nicht-abstrakten Klasse zu haben.

0 Stimmen

@SergeyOrshanskiy Es ist nützlich, wenn Sie, je nachdem, wie Sie ein Objekt konstruieren, eine anonyme Klasse erstellen müssen, die eine Schnittstelle implementiert, um eine Mitgliedsvariable zu instanziieren, aber Sie wollen nicht, dass sie verwendet wird. Wenn Sie es auf null und Sie es versehentlich benutzen (oder jemand anderes), erhalten Sie NullPointerExceptions die weniger offensichtlich sind als UnsupportedOperationExceptions in diesem Fall. Nur ein Beispiel.

576voto

dfa Punkte 110809

java.lang.UnsupportedOperationException

Wird ausgelöst, um anzuzeigen, dass der angeforderte Vorgang nicht unterstützt wird.

4 Stimmen

@JarrodRoberson OK, diese Aussage sollte in diesem Fall wirklich aus der Klassendokumentation entfernt werden. Die Ausnahme scheint auch von anderen Paketen verwendet zu werden. Ich denke, wenn Oracle das tut, dann sollten wir das auch tun. Ich werde einen Fehlerbericht einreichen.

2 Stimmen

Seien Sie sich bewusst, dass dies ein unkontrolliert RuntimeException . Sie erhalten keine Rückmeldung oder Unterstützung bei der Behandlung dieser Ausnahmen während der Kompilierungszeit. Wenn dies für eine Stubbed-Methode oder ein Work-in-Progress verwendet wird, sollten Sie eine Art von geprüft Ausnahme.

3 Stimmen

Sie könnten es so machen, um anzuzeigen, dass die Implementierung noch aussteht: throw new java.lang.UnsupportedOperationException("Not implemented yet."); //todo implementieren

259voto

steffen Punkte 14405

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

  • Um anzuzeigen, dass der angeforderte Vorgang nicht unterstützt wird und höchstwahrscheinlich nie unterstützt wird, werfen Sie eine UnsupportedOperationException .

  • Um anzuzeigen, dass der angeforderte Vorgang noch nicht implementiert wurde, wählen Sie diese Option:

    1. Verwenden Sie die NotImplementedException de apache commons-lang die in commons-lang2 vorhanden war und in commons-lang3 in Version 3.2 wieder hinzugefügt wurde.

    2. Implementieren Sie Ihr eigenes NotImplementedException .

    3. Wirf einen UnsupportedOperationException mit einer Meldung wie "Noch nicht implementiert".

1 Stimmen

Ich schließe mich dem an, weil es mir vernünftig erscheint. Die Angabe "noch" oder "nie" in der Ausnahme gibt einen Hinweis darauf, wie man darauf reagieren sollte.

3 Stimmen

Die Nummern 1 oder 2 sind in der Praxis deutlich vorzuziehen. #3 erfasst die semantische Unterscheidung zwischen "nicht unterstützt" und "nicht implementiert", aber eine separate Klasse macht es einfacher, eine schnelle Suche durchzuführen, um zu überprüfen, dass Sie nicht vergessen haben, etwas zu implementieren, was Sie vor der Übergabe sollten.

13 Stimmen

3 ist am besten für nicht implementierte Methoden geeignet, da es keine Drittanbieter-Bibliothek oder zusätzliche Arbeit erfordert, selbst wenn es sich um Commons-Lang handelt.

43voto

Benny Neugebauer Punkte 45468

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

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

Daher empfehle ich die Verwendung des UnsupportedOperationException .

16voto

Guillaume Punkte 17737

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

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

8voto

Alireza Fattahi Punkte 37703

Die folgenden Calculator Beispielklasse zeigt den Unterschied

public class Calculator() {

 int add(int a , int b){
    return a+b;
  }

  int dived(int a , int b){
        if ( b == 0 ) {
           throw new UnsupportedOperationException("I can not dived by zero, 
                         not now not for the rest of my life!")
        }else{
          return a/b;
       }
   }

   int multiple(int a , int b){
      //NotImplementedException from apache or some custom excpetion
      throw new NotImplementedException("Will be implement in release 3.5");
   } 
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X