Java 如何获取调用静态方法的类和方法?

Java 如何获取调用静态方法的类和方法?,java,Java,我有类X,其中有一个名为doStuff()的static方法,我还有几个其他类,它们的方法出于某种原因调用doStuff()。例如,是否有一种方法可以在doStuff()中使用print方法来打印调用它的方法和类?是:new Throwable()。getStackTrace()返回StackTraceElement的数组。索引号1是您的调用者。是:new Throwable()。getStackTrace()返回StackTraceElement的数组。索引编号1是您的呼叫者。您不需要强制执行

我有
类X
,其中有一个名为
doStuff()
static
方法,我还有几个其他类,它们的方法出于某种原因调用
doStuff()
。例如,是否有一种方法可以在
doStuff()
中使用print方法来打印调用它的方法和类?

是:
new Throwable()。getStackTrace()
返回
StackTraceElement
的数组。索引号1是您的调用者。

是:
new Throwable()。getStackTrace()
返回
StackTraceElement的数组。索引编号1是您的呼叫者。

您不需要强制执行
异常。请勾选类似问题:


您不需要强制执行
异常。请勾选类似问题:

/**
*
  • 0个转储线程 *
  • 1 getStackTrace *
  • 2 getCallingMethodName *
  • 3[调用方法] * *@返回 */ 私有字符串getCallingMethodName(){ 返回Thread.currentThread().getStackTrace()[3].getMethodName(); }
  • /**
    *
  • 0个转储线程 *
  • 1 getStackTrace *
  • 2 getCallingMethodName *
  • 3[调用方法] * *@返回 */ 私有字符串getCallingMethodName(){ 返回Thread.currentThread().getStackTrace()[3].getMethodName(); }
  • 您可以使用以下方法获取调用方类:

    package test;
    
    class TestCaller {
        public static void meth() {
            System.out.println("Called by class: " + sun.reflect.Reflection.getCallerClass(2));
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            TestCaller.meth();
        }
    }
    

    输出:“被类调用:class test.Main”

    您可以使用以下方法获取调用方类:

    package test;
    
    class TestCaller {
        public static void meth() {
            System.out.println("Called by class: " + sun.reflect.Reflection.getCallerClass(2));
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            TestCaller.meth();
        }
    }
    

    输出:“由class:class test.Main调用”

    +1:Or
    Thread.currentThread().getStackTrace()
    谢谢,但我使用的索引是3。索引1给出了类A的名称和doStuff()。+1:Or
    Thread.currentThread().getStackTrace()
    谢谢,但我使用的索引是3。索引1给出了类A和doStuff()的名称。请不要这样做!(调试可能是个例外,但即使有测试也可能更好。)请不要这样做!(调试可能是个例外,但即使有测试也可能更好。)