2013-05-13 61 views
0

如何获取调用方法的参数值?获取调用方法的参数值

我有两个类,即包含两个方法mthA(在类A)和mthB(在类B)中的类A和类B的场景。 mthA调用mthB。现在我想在mthB中知道所有参数已传递给mthA。这基本上是为了记录和处理异常。我能够获得调用类的类名,例如类A和调用mthB的方法名,即mthA。但我坚持要获取mthA的参数。

Thread.currentThread().getStackTrace()[1].getClassName() 

这给了我调用方法即A类

Thread.currentThread().getStackTrace()[2].getMethodName() 

这让我即mthA调用方法的方法名的类名。

如果以某种方式,我可以得到整个方法本身,然后我可以通过使用getParameters()传递给此方法的方法参数。

回答

0

有最简单的方法还是有必要使用Reflection ..?

如果你想知道的是通过什么参数mthA然后传递相同的参数,以mthB还例如:

mthA(1stParam, 2ndParam, ...){ 
    mthB(1stParam, 2ndParam, ..., OtherParamertsForMthB);   
    ... 
} 
0

有没有简单的方法来调用方法的参数值,(如果你不能改变参数被调用的方法包含并传递调用参数值)。

使用像Thread提供的一些API,我们可以像类/方法名称那样获取静态信息,但不会获得像参数值这样的运行时信息。一种方法是在某处存储和管理这种信息,并在需要时显示日志/异常情况。我不认为在java中有一个API。

0

如果它仅用于记录目的,那么您应该自己登录传递到方法中的所有参数mthA

为什么mthB知道mthA的参数值来处理异常?如果你这样做,那么你应该考虑重构代码并处理适当级别的异常。如果传递给mthA的值导致异常,则应在调用mthB之前在其中处理该值。

反射仅有助于获取类和方法的静态信息,并且不会提供传递给方法的参数的运行时值。

+0

mthB必须重新执行methA因此mthB应该知道哪些参数传递给methA。在我的情况下,如果mthA失败,那么我只需要重新执行该方法(休眠时间之后)再解决它。因此我需要知道传递给mthA的参数并重新执行它。 – 2013-05-13 05:17:13

0

为什么不使用AspectJ之类的AOP工具来捕获这些值和日志?你可以使用execution()指针和after()通知。对于非生产部署,您可以记录所有方法调用以及传递的值和返回值。这对于生产环境来说将会是太多的开销。为此,您可以将传递的值(AspectJ建议中的Object args [])存储在局部变量中,并且只在发生异常时才记录它。但即使在这种情况下,会有一些性能损失,因为原始值将被装箱以作为Object []传递给您的建议。

+0

嗨@Amolü我在AspectJ上搜索了一下。我想我可以使用那个东西。但是你能否指出一些很好理解的例子。无论我在哪里搜索,我都发现AspectJ可以与Springs框架一起使用。但我不使用Spring框架。我的是一个硒webdriver框架。你能否在这方面指出一些例子。 – 2013-08-23 05:45:54