Ich habe zwei Klassen von java.lang.Exception
erben. Beide haben eine Methode mit der gleichen Signatur void a(){...}
. Sie können beide in einen Codeblock geworfen werden. Wenn ich das tue:Nicht definierte Methode in Mehrfach-Ausnahme-Catch
catch (SubException1 | SubException2 e)
{
e.a();
}
Dann wird es nicht kompilieren, weil Methode a()
nicht zu Exception gehören. Ist es ein Java-Sprachfehler? Wie sollte ich meinen Code richtig gestalten, um Code-Redundanz zu vermeiden?
Die Signatur keine Rolle spielt, ist es die gleiche Methode einer gemeinsamen Oberklasse? Ist 'a' in einer gemeinsamen Oberklasse von' SubException1' und 'SubException2' definiert? – luk2302
Sie können Redundanz eliminieren, indem Sie ihnen einen gemeinsamen Vorfahren geben, der die Methode 'void a()' verordnet hat. Dann können Sie den Vorfahren fangen und 'e.a()' anrufen – Ishnark
Wenn Sie Multicatch verwenden, ist der tatsächliche Typ der lokalen Ausnahmevariable der am nächsten liegende allgemeine Supertyp, der in Ihrem Fall so aussieht, als wäre er 'Exception'. Es spielt also keine Rolle, dass "SubException1" 'a()' hat. Sie können dies lösen, indem Sie einen gemeinsamen Supertyp mit 'a()' auf beiden Methoden haben, wie bereits vorgeschlagen. –