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

次のようにメソッドをオーバーライドできます

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

type のインスタンス変数をBclassで宣言しますABのコンストラクタで type のパラメータを受け入れますA

のコンストラクターで、のコンストラクBターに渡します。thisA

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 に答える
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 に答える