问题描述
我遇到了一个有趣的情况。我有 2 个异常类 ;WITH CTE AS (
SELECT t2.[Date],t2.[Value],SUM(CASE WHEN t1.[Date] IS NOT NULL Then 1 END) OVER(ORDER BY t2.[Date] DESC) grp
FROM #table2 t2
LEFT JOIN #table1 t1
ON t1.[Date] = t2.[Date]
)
SELECT MAX([Date]) as 'Date',SUM([Value]) as 'Value'
FROM CTE
GROUP BY grp
ORDER BY [Date]
和 MyException1
。在多个 catch(MyException2
) 期间,SonarLint 建议使用方法引用 MyException1 | MyException2 ex
而不是 lambda 表达式 ((ex::getExitCode)
)。但是如果我这次按照建议,编译器会抱怨说“无法解析方法'getExitCode'”。如果我删除异常之一编译成功。所以代码只编译一个异常捕获,或者我必须将类转换为两者的祖先。如果我施放它,这次 SonarLint 会警告我有关不必要的施放。有人可以解释一下这里发生了什么吗?
MyException1
()=>ex.getExitCode()
MyException2
public class MyException1 extends RuntimeException implements ExitCodeGenerator {
public MyException1 (String message,Throwable throwable) {
super(message,throwable);
}
@Override
public int getExitCode() {
return -2;
}
}
编译错误
public class MyException2 extends RuntimeException implements ExitCodeGenerator {
public MyException2 (String 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);
}
...
解决方法
multicatch 的问题是 ex 的类型。
它将是 Exception
而不是 ExitCodeGenerator
,这就是您必须抛出异常的原因。