2010-07-02 14 views
41

Ich konvertiere einige C# -Code nach Java und ich muss eine Ausnahme einfügen, die Cals InvalidOperationException ähnlich ist. Gibt es so etwas? Gibt es auch eine Liste von äquivalenten Ausnahmetypen in den beiden Sprachen? Vielen Dank. Gibt es ein Java-Äquivalent von C# 's InvalidOperationException?


Ich denke in meinem speziellen Fall IllegalStateException ist am besten geeignet. Danke für alle Antworten.

+0

In Java wäre es eher ein Fehler als eine Ausnahme ... Das ist die Art, wie die JVM uns sagt, dass etwas schrecklich schief gelaufen ist. –

+0

@Andreas_D - Was meinst du :) Ich kann deinen Beitrag nicht mit der Frage verbinden. –

+1

@Petar - In Java haben wir zwei Arten von Throwables: Fehler und Ausnahmen. Fehler werden normalerweise von der virtuellen Maschine ausgelöst. Mein Verständnis der IOE ist, dass die VM erkennt, dass eine Methode nicht ausgeführt werden kann. Ich denke, in Java müsste man den geladenen Bytecode zur Laufzeit ändern, um diesen Effekt zu haben, während in C# eine abgestürzte oder entladene DLL zu dieser Ausnahme führen könnte - und in diesem Fall würde sich die JVM beschweren - mit einem Fehler. –

Antwort

53

Wahrscheinlich IllegalStateException.

Aus was ich über InvalidOperationException gelesen habe: "Die Ausnahme, die ausgelöst wird, wenn ein Methodenaufruf für den aktuellen Status des Objekts ungültig ist."

Für IllegalStateException: "Signale, dass eine Methode zu einer illegalen oder unangemessenen Zeit aufgerufen wurde. Mit anderen Worten, die Java-Umgebung oder Java-Anwendung ist nicht in einem geeigneten Zustand für die angeforderte Operation."

Je nachdem, wie Sie InvalidOperationException verwenden, konnte ich auch IllegalArgumentException und UnsupportedOperationException sehen, was Sie wollen. Ersteres impliziert, dass es im Allgemeinen gut ist, die Methode zu verwenden, es wurde gerade dieses Mal Müll übergeben; letzteres impliziert, dass die Methode niemals geeignet ist, um diese Instanz aufzurufen (im Gegensatz zu IllegalStateException, was bedeutet, dass es angebracht sein könnte, die Subjektmethode manchmal gerade nicht aufzurufen).


Ich bin mir nicht bewusst eine allgemeinen C# < => Java Übersetzung von Ausnahmen.

+0

+1 Das ist so ziemlich eine direkte Übereinstimmung. (Der Name der .Net-Ausnahme ist nicht sehr gut, oder?) –

+0

@ T.J .: Ich mag den .Net-Namen irgendwie, besonders wenn er mit der 'UnsupportedOperationException'-Benennung gepaart wurde. Ich denke, dass diese beiden Namen verwendet werden könnten, um die manchmal vs immer Unterscheidung zwischen den beiden zu kommunizieren. Das .Net-Äquivalent einer 'UnsupportedOperationException' (ich weise es in meinem Kommentar auf Ihre Antwort hin) ist * okay * namensweise (' NotSupportedException'), aber beide Sprachen haben schlechte Paarungen der beiden Typen, IMO, gemacht. – Carl

+0

+1 Ein ungültiger Status verursacht eine ungültige Operation. Ziemlich logisch :) –

3

Petar wies mich auf diesen Beispielcode (von Msdn)

void WriteLog() 
{ 
    if (!this.logFile.CanWrite) 
    { 
     throw new System.InvalidOperationException("Logfile cannot be read-only"); 
    } 
    // Else write data to the log and return. 
} 

So in diesem Zusammenhang könnten Sie eine Illegal verwenden, obwohl es heißt:

Geworfen, wenn eine Aktion auf einem versucht wird, Uhrzeit, zu der sich die virtuelle Maschine nicht im richtigen Status befindet.

Und ein illegaler VM-Status ist definitiv nicht das Problem im obigen Referenzbeispiel. Hier ist das Problem, dass das Objekt ungültig ist, da es auf eine schreibgeschützte Protokolldatei verweist.

Meine eigenen Rat: nur eine benutzerdefinierte Ausnahme wie

package com.pany.project; 
public class InvalidOperationException extends RuntimeException { 

    // add constructors with call to super as needed 

} 

Für mich definieren, das ist viel einfacher, dann versuchen, die am besten passende Ausnahme vom java.lang Paket zu finden.

+0

Das schadet jedoch der Interoperabilität. Wenn Sie eine Standardausnahme finden, die zu Ihnen passt, führt die Erstellung neuer Ausnahmen dazu, dass jede Bibliothek ihre eigene definiert. Es ist schön, das wiederverwendbare Wissen der 'java.lang'-Ausnahmetypen zu haben, was sie bedeuten usw. – BAF

Verwandte Themen