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.
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. –
@Andreas_D - Was meinst du :) Ich kann deinen Beitrag nicht mit der Frage verbinden. –
@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. –