2017-01-10 1 views
0

У меня есть 2 класса, которые полагаются друг на друга, и оба они имеют свои соответствующие интерфейсы. Однако я не могу настроить конструктор на обоих классах чисто. Короче говоря, один класс должен быть создан до того, как будет создан экземпляр другого класса.Явная взаимозависимость Java с интерфейсами, установленными в конструкторе

Class A implements IA { 
    public A(IB b) { 
     myBclass = b; 
    } 
    private IB myBclass; 
} 

Class B implements IB { 
    public B(IA a) { 
     myAclass = a; 
    } 
    private IA myAclass; 
} 

static void main(String[] args) { 
    A a = new A(null); 
    B b = new B(a); 
    a.setB(b); // how can I avoid doing this 
} 

Я хотел бы избежать установки переменных-членов вне конструктора.

ответ

2

У вас может быть одна конструкция другой.

class A implements IA { 
    private IB myBclass; 
    public A() { 
     myBclass = new B(this); 
    } 
    // etc. 
} 
class B implements IB { 
    private IA myAclass; 
    public B(IA a){ 
     myAclass = a; 
    } 
    // etc. 
} 

Таким образом, вы не должны изменять их после строительства.

public static void main(String[] args){ 
    A a = new A(); 
    B b = a.getB(); 
} 
+1

Вам не нужно было убедиться, что A's B на самом деле это B? В Main можно было бы сделать 'IB b = new B (новый A())), что приведет к B-> A-> B ', где B! = B' ... – Fildor

+0

@Fildor Да , вполне возможно. Поэтому вы, вероятно, не захотите этого делать. – khelwood

+0

Да, конечно _I_ не будет, но может быть, какой-нибудь другой Дев. Вы порекомендовали бы просто оставить комментарий, чтобы не делать этого для других разработчиков или применять его в коде, например, бросая какое-то исключение? – Fildor

Смежные вопросы