如何使用反射检查方法

时间:2011-09-24 08:55:55

标签: java inspection

public void foo(){
    throw new Exception("foo");
}


public void bar(){
    foo();
}

是否可以检查方法bar(),以便知道在foo()内没有try catch的情况下调用bar()

3 个答案:

答案 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中存在的方法,但不能检查方法中写入的逻辑。