public void foo(){
throw new Exception("foo");
}
public void bar(){
foo();
}
是否可以检查方法bar()
为了知道foo()
被称为无try catch
内bar()
检查的方法?如何使用反射
public void foo(){
throw new Exception("foo");
}
public void bar(){
foo();
}
是否可以检查方法bar()
为了知道foo()
被称为无try catch
内bar()
检查的方法?如何使用反射
您可能感兴趣的包装代理内部全班并与InvocationHandler的看着它:
http://www.javalobby.org/java/forums/t18631.html
你的InvocationHandler如果它看到“foo”被立刻之后调用会做一些特别的东西“酒吧“,我猜。
+1非常有趣 – JohnJohnGa
+1 - 提高我的知识的好链接。谢谢。但是,它不能保证它显示被调用的方法已经使用try..catch之类的东西。 – Naved
@Vicente Plata是否意味着我们需要在代理中随处添加try catch?因为如果一个方法已经包含try catch,它就不需要了...... – JohnJohnGa
据我所知是关心,有没有这样的反射API,它允许看到里面实现。您只能检查类中存在的方法,但不能使用方法中写入的逻辑。
你也可以使用一个方面,或者如果你需要做这在测试看看或的Mockito类似的框架。
这很难说,最好的解决办法是什么不知道的,你需要做到这一点的环境。
好像你的意图是让你的应用程序代码的检查方法的实现,并且条件分支时方法不能使用try-catch
内部。
除非你正在编写单元测试,让我打消这样做的原因有两个:
1.开发人员应该了解他的应用程序逻辑。
你应该已经知道你的代码做什么。如果该方法是封闭源API的一部分,请检查抛出的异常类型的文档。
2.它增加了不必要的复杂性。
由于 执行的流量取决于方法的实现,你将有一个 应用其行为取决于自身的 源的状态。(如更换方法可以创建side-effects,这 使得调试变得更加困难。)
如果您可以通过检查源代码或API文档确定方法的行为,什么是需要在运行时验证?
由于未检测到已检查的异常,因此无法编译。如果它是RuntimeException会更有趣。静态代码分析可能有一些答案。 – TJR