在Java中调用方法的调用者

时间:2013-11-04 05:37:32

标签: java

只是想知道,你如何找出调用另一种方法的方法的名称?我想使用Method类。

2 个答案:

答案 0 :(得分:6)

您可以使用StackTraceElement

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();

StackTraceElement数组中的元素顺序:数组的最后一个元素表示堆栈的底部,这是序列中最近的方法调用。

获得所需的方法名称后,您可以使用反射来调用它:

Method lastMethod = YourClass.class.getMethod("yourMethodName");
lastMethod.invoke();

注意:应根据您的班级和方法更改代码。

答案 1 :(得分:0)

获取名称很棘手,获取方法非常困难,因为您不知道参数列表但是您知道该类,并且您可以在读取字节代码时使用行号来查找包含该方法的方法线。如果方法是静态的(我怀疑它不是)你就可以了。如果你需要一个实例,那么以任何便携方式找到它几乎是不可能的。

你要做的事情就是Java相当于说;我如何通过几个简单的步骤学习飞行。

你的问题是什么,这不太可能成为一个好的解决方案。如果你需要回调调用你的对象,你应该将该对象作为参数传递,理想情况是通过接口传递。

当你发现代码自身运行时,这肯定会以某种混乱结束,你想要简化你的依赖。

你应该做的就是这样。

interface Callback<T> {
    onResult(T t);
}


class A implements Callback<MyResult> {
    B b = new B();
    public void method() {
        b.doSomething(this);
    }
    public void onResult(MyResult mr) {
        // do something with mr
    }
}

class B {
    public void doSomething(Callback<MyResult> cb) {
         // do something
         cb.onResult(new MyResult(something));
         // do something else
    }
}

当然这会更简单,如果不是回调第一个方法,你只需返回一个结果,而不需要这个代码的一半。这就是为什么通常当你想将某些东西传回给调用者时,你使用返回值而不是递归。