获取调用方法的参数值
如何获取调用方法的参数值?获取调用方法的参数值
我有两个类,即包含两个方法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()传递给此方法的方法参数。
有最简单的方法还是有必要使用Reflection ..?
如果你想知道的是通过什么参数mthA
然后传递相同的参数,以mthB
还例如:
mthA(1stParam, 2ndParam, ...){
mthB(1stParam, 2ndParam, ..., OtherParamertsForMthB);
...
}
有没有简单的方法来调用方法的参数值,(如果你不能改变参数被调用的方法包含并传递调用参数值)。
使用像Thread提供的一些API,我们可以像类/方法名称那样获取静态信息,但不会获得像参数值这样的运行时信息。一种方法是在某处存储和管理这种信息,并在需要时显示日志/异常情况。我不认为在java中有一个API。
如果它仅用于记录目的,那么您应该自己登录传递到方法中的所有参数mthA
。
为什么mthB
知道mthA
的参数值来处理异常?如果你这样做,那么你应该考虑重构代码并处理适当级别的异常。如果传递给mthA
的值导致异常,则应在调用mthB
之前在其中处理该值。
反射仅有助于获取类和方法的静态信息,并且不会提供传递给方法的参数的运行时值。
为什么不使用AspectJ之类的AOP工具来捕获这些值和日志?你可以使用execution()指针和after()通知。对于非生产部署,您可以记录所有方法调用以及传递的值和返回值。这对于生产环境来说将会是太多的开销。为此,您可以将传递的值(AspectJ建议中的Object args [])存储在局部变量中,并且只在发生异常时才记录它。但即使在这种情况下,会有一些性能损失,因为原始值将被装箱以作为Object []传递给您的建议。
嗨@Amolü我在AspectJ上搜索了一下。我想我可以使用那个东西。但是你能否指出一些很好理解的例子。无论我在哪里搜索,我都发现AspectJ可以与Springs框架一起使用。但我不使用Spring框架。我的是一个硒webdriver框架。你能否在这方面指出一些例子。 – 2013-08-23 05:45:54
mthB必须重新执行methA因此mthB应该知道哪些参数传递给methA。在我的情况下,如果mthA失败,那么我只需要重新执行该方法(休眠时间之后)再解决它。因此我需要知道传递给mthA的参数并重新执行它。 – 2013-05-13 05:17:13