2013-05-02 3 views
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 
    } 

... но это не делает меня счастливым, я хочу как-то сразу получить доступ, если это возможно.

ответ

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(); 
} 
+0

Да, как это, но это единственный способ? Я не могу так или иначе получить доступ напрямую? – jovanMeshkov

+0

Я не думаю, что мне нужны одиночные игры. Даже если у меня есть несколько экземпляров любого класса, экземпляр «супер» будет уникальным ... – jovanMeshkov

+0

@JovanMeshkov Я отредактировал. Попробуй это? –

0

Объявляет переменную экземпляра типа B в классе A. Примите параметр типа B в конструкторе для 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; } 

} 
+0

Я забыл упомянуть, что я знаю об этом подходе, мне нужно что-то, что может получить доступ напрямую или к этой вещи не существует? – jovanMeshkov

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"); 
    } 
} 
Смежные вопросы