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