2

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

4

2 回答 2

6

您可以使用StackTraceElement

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

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

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

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

注意:代码应根据您的类和方法进行更改。

于 2013-11-04T05:38:45.010 回答
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
    }
}

当然,如果不是回调第一个方法,而是返回一个结果并且不需要一半的代码,这一切都会简单得多。这就是为什么通常当您想将某些内容传递回调用者时,您使用返回值而不是递归。

于 2013-11-04T08:28:17.460 回答