2011-09-24 47 views
3
public void foo(){ 
    throw new Exception("foo"); 
} 


public void bar(){ 
    foo(); 
} 

是否可以检查方法bar()为了知道foo()被称为无try catchbar()检查的方法?如何使用反射

+0

由于未检测到已检查的异常,因此无法编译。如果它是RuntimeException会更有趣。静态代码分析可能有一些答案。 – TJR

回答

7

您可能感兴趣的包装代理内部全班并与InvocationHandler的看着它:

http://www.javalobby.org/java/forums/t18631.html

你的InvocationHandler如果它看到“foo”被立刻之后调用会做一些特别的东西“酒吧“,我猜。

+0

+1非常有趣 – JohnJohnGa

+0

+1 - 提高我的知识的好链接。谢谢。但是,它不能保证它显示被调用的方法已经使用try..catch之类的东西。 – Naved

+0

@Vicente Plata是否意味着我们需要在代理中随处添加try catch?因为如果一个方法已经包含try catch,它就不需要了...... – JohnJohnGa

0

据我所知是关心,有没有这样的反射API,它允许看到里面实现。您只能检查类中存在的方法,但不能使用方法中写入的逻辑。

0

你也可以使用一个方面,或者如果你需要做这在测试看看或的Mockito类似的框架。

这很难说,最好的解决办法是什么不知道的,你需要做到这一点的环境。

3

好像你的意图是让你的应用程序代码的检查方法的实现,并且条件分支时方法不能使用try-catch内部。

除非你正在编写单元测试,让我打消这样做的原因有两个:

1.开发人员应该了解他的应用程序逻辑。

你应该已经知道你的代码做什么。如果该方法是封闭源API的一部分,请检查抛出的异常类型的文档。

2.它增加了不必要的复杂性。

由于 执行的流量取决于方法的实现,你将有一个 应用其行为取决于自身的 源的状态。(如更换方法可以创建side-effects,这 使得调试变得更加困难。)

如果您可以通过检查源代码或API文档确定方法的行为,什么是需要在运行时验证?