只是想知道,你如何找出调用另一种方法的方法的名称?我想使用Method类。
答案 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
}
}
当然这会更简单,如果不是回调第一个方法,你只需返回一个结果,而不需要这个代码的一半。这就是为什么通常当你想将某些东西传回给调用者时,你使用返回值而不是递归。