Invoking the caller of a method in Java
本问题已经有最佳答案,请猛点这里访问。
只是想知道,如何找到调用另一个方法的方法的名称? 我想使用Method类。
您可以使用StackTraceElement:
1 |
StackTraceElement数组中元素的顺序:数组的最后一个元素代表堆栈的底部,这是序列中最近的方法调用。
一旦有了所需的方法名称,就可以使用反射调用它:
1 2 |
注意:应根据您的类和方法更改代码。
获取名称非常棘手,获取方法非常困难,因为您不知道参数列表,但是您知道类,并且在读取字节码时可以使用行号来查找包含该行的方法。如果该方法是静态的(我怀疑不是),则可以。如果您需要一个实例,则以任何可移植的方式找到几乎是不可能的实例。
您想要做的事情是Java的对等。如何通过几个简单的步骤来学习如何飞行。
您遇到的问题是,这极不可能是一个好的解决方案。如果您需要回调调用您的对象,则应将该对象作为参数传递,最好是通过接口传递。
每当您发现代码在其自身上运行时,肯定会以某种混乱结束,您想简化依赖关系。
您应该做的就是这样。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 } } |
当然,如果您只返回一个结果而不是一半的代码,而不是调用第一个方法,这将更加简单。这就是为什么通常当您要将某些内容传递回调用方时,使用返回值而不是递归的原因。