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


public void bar(){
    foo();
}

是否可以检查该方法bar()以知道在没有insidefoo()的情况下调用该方法?try catchbar()

4

3 回答 3

7

您可能有兴趣将整个类包装在 Proxy 中并使用 InvocationHandler 进行观察:

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

我猜,如果你的 InvocationHandler 看到在 "bar" 之后立即调用 "foo",它会做一些特别的事情。

于 2011-09-24T08:59:34.787 回答
3

似乎您的意图是让您的应用程序代码检查方法实现,并在该方法无法在try-catch内部使用时进行条件分支。

除非您正在编写单元测试,否则我不鼓励这样做,原因有两个:

1. 开发者应该了解他的应用逻辑。

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

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

因为执行流程取决于方法实现,所以您将拥有一个应用程序,其行为取决于其自身源的状态。(例如,更改方法会产生副作用,这会使调试更加困难。)

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

于 2011-09-24T10:02:35.457 回答
0

据我所知,没有这样的反射 API 可以查看内部实现。您只能检查 Class 中存在的方法,但不能检查方法中编写的逻辑。

于 2011-09-24T08:59:13.807 回答