【发布时间】:2013-11-04 05:37:32
【问题描述】:
只是想知道,您如何找出调用另一个方法的方法的名称?我想使用 Method 类。
【问题讨论】:
标签: java
只是想知道,您如何找出调用另一个方法的方法的名称?我想使用 Method 类。
【问题讨论】:
标签: java
您可以使用StackTraceElement:
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
StackTraceElement 数组中元素的顺序:数组的最后一个元素表示堆栈的底部,是序列中最近的方法调用。
一旦你有了想要的方法名,你就可以使用反射来调用它:
Method lastMethod = YourClass.class.getMethod("yourMethodName");
lastMethod.invoke();
注意:代码应根据您的类和方法进行更改。
【讨论】:
获取名称很棘手,获取方法非常困难,因为您不知道参数列表但您知道类,并且您可以在读取字节码时使用行号来查找包含该参数的方法线。如果该方法是静态的(我怀疑它不是),那么您就可以了。如果您需要一个实例,以任何可移植的方式找到它几乎是不可能的。
您正在尝试做的事情是 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
}
}
当然,如果不是回调第一个方法,而是只返回一个结果并且不需要一半的代码,这一切都会简单得多。这就是为什么通常当你想将某些东西传回给调用者时,你会使用返回值而不是递归。
【讨论】: