多个异常处理中方法引用的编译错误
Compile error for method reference in multiple exception handling
我遇到了一个有趣的情况。我有 2 个例外 classes MyException1
和 MyException2
。在多个 catch(MyException1 | MyException2 ex
) 期间,SonarLint 建议使用方法引用 (ex::getExitCode)
而不是 lambda 表达式 (()=>ex.getExitCode()
)。但是,如果这次我听从建议,编译器会抱怨说“无法解析方法 'getExitCode'”。如果我删除其中一个异常编译成功。因此,代码仅在捕获一个异常时编译,否则我必须将 class 转换为两者的祖先。如果我施放它,这次 SonarLint 会警告我不必要的施放。有人可以解释这里发生了什么吗?
MyException1
public class MyException1 extends RuntimeException implements ExitCodeGenerator {
public MyException1 (String message, Throwable throwable) {
super(message, throwable);
}
@Override
public int getExitCode() {
return -2;
}
}
MyException2
public class MyException2 extends RuntimeException implements ExitCodeGenerator {
public MyException2 (String message, Throwable throwable) {
super(message, throwable);
}
@Override
public int getExitCode() {
return -2;
}
}
编译错误
...
} catch (MyException1 | MyException2 ex) {
System.exit(SpringApplication.exit(event.getApplicationContext(), ex::getExitCode);
}
...
已编译
...
} catch (MyException1 | MyException2 ex) {
System.exit(SpringApplication.exit(event.getApplicationContext(), ((ExitCodeGenerator)ex)::getExitCode);
}
...
或
已编译
...
} catch (MyException1 ex) {
System.exit(SpringApplication.exit(event.getApplicationContext(), ex::getExitCode);
}
...
multicatch的问题是ex的类型
它将是 Exception
而不是 ExitCodeGenerator
这就是为什么你必须抛出异常。
我遇到了一个有趣的情况。我有 2 个例外 classes MyException1
和 MyException2
。在多个 catch(MyException1 | MyException2 ex
) 期间,SonarLint 建议使用方法引用 (ex::getExitCode)
而不是 lambda 表达式 (()=>ex.getExitCode()
)。但是,如果这次我听从建议,编译器会抱怨说“无法解析方法 'getExitCode'”。如果我删除其中一个异常编译成功。因此,代码仅在捕获一个异常时编译,否则我必须将 class 转换为两者的祖先。如果我施放它,这次 SonarLint 会警告我不必要的施放。有人可以解释这里发生了什么吗?
MyException1
public class MyException1 extends RuntimeException implements ExitCodeGenerator {
public MyException1 (String message, Throwable throwable) {
super(message, throwable);
}
@Override
public int getExitCode() {
return -2;
}
}
MyException2
public class MyException2 extends RuntimeException implements ExitCodeGenerator {
public MyException2 (String message, Throwable throwable) {
super(message, throwable);
}
@Override
public int getExitCode() {
return -2;
}
}
编译错误
...
} catch (MyException1 | MyException2 ex) {
System.exit(SpringApplication.exit(event.getApplicationContext(), ex::getExitCode);
}
...
已编译
...
} catch (MyException1 | MyException2 ex) {
System.exit(SpringApplication.exit(event.getApplicationContext(), ((ExitCodeGenerator)ex)::getExitCode);
}
...
或
已编译
...
} catch (MyException1 ex) {
System.exit(SpringApplication.exit(event.getApplicationContext(), ex::getExitCode);
}
...
multicatch的问题是ex的类型
它将是 Exception
而不是 ExitCodeGenerator
这就是为什么你必须抛出异常。