【发布时间】:2015-07-19 18:44:50
【问题描述】:
当我调用类中的方法时,该方法将获得使用sun.reflect.Reflection.getCallerClass(2) 调用它的java.lang.Class。这不是我想要的。我希望反射返回调用它的类 Object(即,如果我从 Bar 类调用方法,Reflection.getCallerClass() 返回类型为 Bar 的对象)
假设我有这个类:
public class Foo {
public static void printOutCallerObject() {
System.out.println(classTypeThatCalledOnMethod);
}
}
调用者:
public class Bar {
public static void main(String[] args) {
Foo.printOutCallerObject();
}
}
然后程序会打印出“Bar”。
【问题讨论】:
-
这不清楚。您是说要检索实际调用的实例,而不仅仅是类?
-
没有很好的方法来做到这一点。这是可能的,但它也经常是非常糟糕的设计!我见过的唯一用途是记录,记录器应该自动为您处理...您可以使用
Thread.currentThread().getStackTrace()获取此信息。 -
您为什么要这样做?听起来像XY problem
-
@VinceEmigh 一个常见的用例是日志记录和相关的代码检查。当然可能有更好的方法来解决它(例如,使用调试器单步执行),但想要这样做并非完全不合理。
-
@dimo414 这就是面向方面编程的设计目的。 AspectJ 可以帮助他实现他想要的。但正如我之前所说,他问的是他觉得应该如何记录日志,而不是问他应该如何记录日志。他可以通过避免 XY 问题得到更好的答案。他应该使用某种日志系统,以确保日志逻辑不会与其他逻辑混合
标签: java reflection