Java - 我可以反思地发现我是否从catch块中的函数调用了partifuclar异常?

new*_*nne 3 java reflection

首先,在我被大吼之前,我想要明确一些事情:我没有计划编写任何能够使用这种控制流程的代码; 它显然很可怕.忘记一个用例,这是一个关于它是否可能的问题:

我想知道是否有可能知道调用堆栈的某个位置,是否在catch块中为特定异常调用了一个函数.

假设我有一个功能:

foo() {
try {
    something
}
catch (SuperException s) {
    bar()
}
Run Code Online (Sandbox Code Playgroud)

因此,如果没有对bar的方法签名的控制,并且给定的bar也被许多其他函数调用,那么如果在catch块中调用超级函数,那么bar的行为会不同吗?(并且不,被foo调用不是一个充分条件,它是重要的超级例外)

Pet*_*rey 6

您可以查看调用堆栈并获取每个调用的行号.

您可以读取字节代码以确定catch块的位置以及这些块中的代码行.

将两者匹配在一起以查看调用堆栈中的任何位置是否在catch块中.

注意:只有在代码中编译了调试信息时,这才有效.