【问题标题】:How to get caller's ( or caller's caller, or deeper in call stack ) instance ID - my.package.MyClass@3e7bfc04如何获取调用者的(或调用者的调用者,或更深的调用堆栈)实例 ID - my.package.MyClass@3e7bfc04
【发布时间】:2012-06-08 09:49:22
【问题描述】:

实际上有两个问题。

第一个是 - 我怎样才能获得这样的 id (my.package.MyClass@3e7bfc04) 具有“this”(在方面内部,使用 pjp.getTarget() 来获取“this”)。

第二个是 - 如何在当前程序执行点(其他类的某些方法,或更深层次)获取调用者的实例 id。我可以使用

获取调用堆栈
StackTraceElement [] trace = Thread.currentThread().getStackTrace();

然后决定是否有我需要的呼叫者。然后我想获取调用者的实例ID,但不知道如何获取它。

【问题讨论】:

  • 找到了一种获取参考 id 的解决方案: String hashCode = Integer.toHexString(System.identityHashCode(pjp.getTarget()));但是...它不等于 ClassName@HashCode,正如我在调试器中看到的那样。

标签: java call stack-trace aspectj


【解决方案1】:

您可以使用Java ReflectionStackTraceElement

StackTraceElement[] elements = new Throwable().getStackTrace();

    String calleeMethod = elements[0].getMethodName();
    String callerMethodName = elements[1].getMethodName();
    String callerClassName = elements[1].getClassName();

    System.out.println("CallerClassName=" + callerClassName + " , Caller method name: " + callerMethodName);
    System.out.println("Callee method name: " + calleeMethod);

【讨论】:

  • 确实可以得到像 my.package.myClass 这样的类名。正如我在主题中发布的那样,我已经这样做了,但我需要知道这个类的 instance 调用当前方法。
猜你喜欢
  • 2011-01-16
  • 2022-12-10
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
相关资源
最近更新 更多