只是想知道,您如何找出调用另一个方法的方法的名称?我想使用 Method 类。
问问题
135 次
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 回答