我有兩個 RuntimeExceptions,如下所示:
@Getter
@RequiredArgsConstructor
public class MyCustomRuntimeException1 extends RuntimeException {
private final String message;
private final int code;
}
@Getter
@RequiredArgsConstructor
public class MyCustomRuntimeException2 extends RuntimeException {
private final String message;
private final int code;
}
然后我有我的 doSomethingMethod 我在同一個 catch 子句中捕獲它們:
public void doSomething() {
[....]
[....]
try {
[....]
[....]
} catch (MyCustomRuntimeException1 | MyCustomRuntimeException2 ex) {
log.error("!! doSomething: An error occurred", ex);
var code = ex.getCode();
var message = ex.getMessage();
[......]
[......]
}
}
我收到一個編譯時錯誤,它Cannot resolve method 'getCode' in 'RuntimeException'在以下行中顯示:
var code = ex.getCode();
另一方面,這段代碼可以正常作業:
public void doSomething() {
[....]
[....]
try {
[....]
[....]
} catch (MyCustomRuntimeException1 ex) {
log.error("!! doSomething: An error occurred", ex);
var code = ex.getCode();
var message = ex.getMessage();
[......]
[......]
} catch (MyCustomRuntimeException2 ex) {
log.error("!! doSomething: An error occurred", ex);
var code = ex.getCode();
var message = ex.getMessage();
[......]
[......]
}
}
uj5u.com熱心網友回復:
我相信,當您有一個 multi-catch 子句時,這里會發生什么,在您的情況下,例外引數的推斷型別是multi-catch 中列出的例外ex的最接近的公共超類。我在語言參考中找不到明確記錄,但至少在一個地方暗示了這一點。請參閱14.20末尾的示例。嘗試陳述句
因此,您的兩個例外類中最接近的公共超類是RuntimeException,它當然沒有getCode()方法。
正如@VasilyLiakovsky 在評論中所建議的那樣,您可以創建一個抽象中間類來定義您想要共享的常用方法。
uj5u.com熱心網友回復:
由于您正在擴展getCode()MyCustomRuntimeException1 和 MyCustomRuntimeException2 中存在的方法,因此編譯器getCode()對于您要指向哪個運行時例外感到困惑?.
要解決此問題,您可以
i) 指定類名和您嘗試呼叫的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/469988.html
