class A{
    public void methodA(){
         //当该方法被调用时,如何动态的获取,该方法是从哪被调用的呢?
    }
}class B{
    public void test1(){
        A a = new A();
        a.methodA();
    }    public void test2(){
        A a = new A();
        a.methodA();
    }
}
class C{
    public void test3(){
        A a = new A();
        a.methodA();
    }
}
如上代码,当外界调用 A.methodA 时,能否动态的知道,该方法是从哪个方法中(test1,test2,test3),调用的呢?

解决方案 »

  1.   


    在 class B 中的  test1() 和 test2() 方法,以及 class C 中的 test3() 方法中都有可能调用 class A 的 methodA() 方法。那么当 methodA() 被调用时,如何才能在 methodA() 方法内部,知道它是在 test1() 方法中被调用的,还是在 test2() 方法中被调用的,还是在 test3() 方法中被调用的呢。
      

  2.   

    最笨的方法
    public void methodA(Class c,Method m){
      //当该方法被调用时,如何动态的获取,该方法是从哪被调用的呢?
      c类的m方法调用的。
    }//不过不知道你的需求是什么?
      

  3.   

    package csdn;
    class A{
        public void methodA(){
         System.out.println(Thread.currentThread().getStackTrace().length);
         StackTraceElement[] ss=Thread.currentThread().getStackTrace();
         for (StackTraceElement stackTraceElement : ss) {
    System.out.println(stackTraceElement.getClassName());
    }
         
        }
    }class B{
        public void test1(){
            A a = new A();
            a.methodA();
        }    public void test2(){
            A a = new A();
            a.methodA();
        }
    }
    class C{
        public void test3(){
            A a = new A();
            a.methodA();
        }
    }
    public class Test {
    public static void main(String[] args) {
    C c=new C();
    c.test3();
    }
    }