java中 有办法 在被调用对象中得到调用对象实例 吗?比如说A调用了B,但是没有显式的将A传入B
这时候在B中,可以通过调用栈信息知道是A调用了B
但是只是知道A的class属性,但我想得到A的instance.

解决方案 »

  1.   

    public class A {
    private String s; public String getS() {
    return s;
    } public void setS(String s) {
    this.s = s;
    } public void go() {
    new B().go();
    System.out.println(s);
    }
    }public class B { private String s; public String getS() {
    return s;
    } public void setS(String s) {
    this.s = s;
    } public void go() {
    //setS(a.getS()) 在这儿a算是调用B的A的instance ,关键是如何得到这个instance(没有显式传入)
    System.out.println(s);
    }
    }public class TEST {
    public static void main(String[] args) {
    new A().go();
    }
    }
      

  2.   


    public void go() { 
    new B().go(); 
    System.out.println(s); 
    }
    这个不对吧,会一直递归下去吧。
      

  3.   

    thinking java 中楼主说的这种现象叫回调,用内部类实现。
    在A中定义一个内部类,这个内部类中定义一个方法调用A.go()。
    B.go()加一A中内部对象的参数。通过这个对象就可以在B.go()中调用A.go()了
    可能应该是这样实现的。不过这样可正的要递归了。
      

  4.   

    楼主你这样设计代码,思路上有问题。
    B类不可能得到A类的对象,也不应该能。B不是A的附属,任何对象都可以调用B.GO(),而难道任何对象都要有getS()吗?
    如果你确定要B不能脱离A运行,可以这样设计public class A {
    private String s; public String getS() {
    return s;
    } public void setS(String s) {
    this.s = s;
    } public void go() { 
    new B().go(); 
    System.out.println(this.s); 
    }

    public class B {
    private String s; public String getS() {
    return s;
    } public void setS(String s) {
    this.s = s;
    }

    public void go() {
    setS(A.this.getS());
    System.out.println(this.s); 
    }
    }

    public static void main(String[] args) {
    A a = new A();
    a.setS("aa");
    a.go();
    }
    }
      

  5.   

    上面的程序输出:
    aa
    aa
    符合楼主的需求
      

  6.   

    回调是需要有容器思想的,如果光涉猎J2SE的话没有容器思想,很难理解,
    A调用B, 在B中得到A的一个实例,你的意思是不知道谁给我的一个实例,但是我却想知道这个实例是属于谁的,那么你只能去猜想谁有可能去调用这个类,现在JDK1.5出现了一个新的技术就是内省与反射,通过实例知道类中的方法,通过类知道类中的方法,虽说不是很懂但这算是一种解决思路吧!