public void foo(){
throw new Exception("foo");
}
public void bar(){
foo();
}
是否可以检查该方法bar()
以知道在没有insidefoo()
的情况下调用该方法?try catch
bar()
public void foo(){
throw new Exception("foo");
}
public void bar(){
foo();
}
是否可以检查该方法bar()
以知道在没有insidefoo()
的情况下调用该方法?try catch
bar()
您可能有兴趣将整个类包装在 Proxy 中并使用 InvocationHandler 进行观察:
http://www.javalobby.org/java/forums/t18631.html
我猜,如果你的 InvocationHandler 看到在 "bar" 之后立即调用 "foo",它会做一些特别的事情。
似乎您的意图是让您的应用程序代码检查方法实现,并在该方法无法在try-catch
内部使用时进行条件分支。
除非您正在编写单元测试,否则我不鼓励这样做,原因有两个:
1. 开发者应该了解他的应用逻辑。
您应该已经知道您的代码在做什么。如果该方法是封闭源 API 的一部分,请查看文档以了解抛出的异常类型。
2. 它增加了不必要的复杂性。
因为执行流程取决于方法实现,所以您将拥有一个应用程序,其行为取决于其自身源的状态。(例如,更改方法会产生副作用,这会使调试更加困难。)
如果您可以通过查看源代码或 API 文档来确定方法行为,那么在运行时需要验证什么?
据我所知,没有这样的反射 API 可以查看内部实现。您只能检查 Class 中存在的方法,但不能检查方法中编写的逻辑。