【问题标题】:How do i get the caller classname from a static method of different class [duplicate]如何从不同类的静态方法中获取调用者类名 [重复]
【发布时间】:2018-05-23 05:55:11
【问题描述】:

可以说,我有

public class ClassA {
    public static void main(String[] args) {
        ClassB.methodB();
    }
}

我正在调用另一个类的静态函数

public class ClassB{
    public static void methodB() {
        System.out.Println("<I want to print the classname of classA>");
    }
}

我如何做到这一点?

【问题讨论】:

  • 真的有必要吗?这似乎是一个 hacky XY 问题。为什么需要这个?
  • 您可以使用与 java 9 docs.oracle.com/javase/9/docs/api/java/lang/StackWalker.html 一起使用的 stackwalker 并在您的堆栈中“退后一步”.. 但这很脏 ;-)
  • 好吧,我正在尝试使用 Log4j,但我不想在每个类中都创建静态 Logger 对象。所以我创建了一个 BaseLogger 类,它使用一些自定义静态日志记录功能扩展了 Logger (Log4j)。当我从另一个类调用我(在 BaseLogger 类中)创建的这些函数时,它们正在记录 BaseLogger 的类名,但我想打印的是调用类名。

标签: java


【解决方案1】:

你真的不能(你可以抛出异常并挖掘堆栈跟踪,但这非常慢且不必要)。

而是问自己一个问题,为什么你认为你需要它? 是否用于记录目的?

methodB 需要知道什么才能执行其工作。 如果它需要知道一些东西,它应该只需要一个参数并根据它决定做什么。

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 2013-04-24
    相关资源
    最近更新 更多