0

我想获取类的实例,这个实例是在哪里创建的,有可能吗?

注意:类不是嵌套的。

    class Frame {
        protected Panel p1;
        private String name;
        public Frame(String name) {
            this.name=name;
            p1=new Panel();
        }
        public String getName() {
            return name;
        }
    }

..

    class Panel {
        public Panel() {
            System.out.println("I was made in: "+Frame.this.getName()); 
                                    // but you can't do this
        }   
    }

..

    public void main(String[] args) {
        Frame f1=new Frame("first"); // should print: first
        Frame f2=new Frame("second"); // should print: second
    }

注2:我知道这种方法:

 class Frame {
        protected Panel p1;
        private String name;
        public Frame(String name) {
            this.name=name;
            p1=new Panel();
        }
        public String getName() {
            return name;
        }
    }

..

    class Panel {
                private Frame owner;
        public Panel(Frame owner) {
                        this.owner=owner; // DECLARING OWNER
            System.out.println("I was made in: "+owner.getName()); 

        }   
    }

..

    public void main(String[] args) {
        Frame f1=new Frame("first"); // should print: first
        Frame f2=new Frame("second"); // should print: second
    }

...但这并不让我高兴,如果可能的话,我想以某种方式直接访问。

4

3 回答 3

0

试一试。我不确定它是否可以编译,我无法检查我在哪里。但这应该是您要查找的内容的一般概念。

Class A {
    B b = B.masterB;
    A() { }
    getB() { return b;}
}

Class B {
  static B masterB = new B();

    A a;
    B() {
       a=new A();
    }
    getA() { return a; }
}

class main
{

static void main(string[] args) {
  A a = new A();
  B result = a.getB();
}
于 2013-05-02T22:15:29.333 回答
0

您可以按如下方式覆盖方法

public class Frame {

    protected Panel p1;
    private String name;
    public Frame(String name) {
        this.name=name;
        p1=new Panel() {
            public String ownerName() {
                return getName();
            }
        };
    }
    public String getName() {
        return name;
    }


    class Panel {
        public Panel() {
            System.out.println("I was made in: "+ownerName()); 

        }

        public String ownerName() {
            return null;
        }
    }

    public static void main(String[] args) {
         Frame f1=new Frame("first"); 
         Frame f2=new Frame("second");
    }
}
于 2013-05-03T01:35:06.370 回答
0

B在 class 中声明一个类型的实例变量AB在 的构造函数中接受类型参数A

B的构造函数中,传递this给 的构造函数A

class A {
    B b;
    A(B b) {
        this.b = b;
        // get the instance of B so i can call do this, for example:
        b.getA();
    }
}

class B {
    A a;
    B() {
       a=new A(this);
    }
    A getA() { return a; }

}
于 2013-05-02T22:17:18.963 回答