2015-01-06 6 views
0

У меня есть следующий код:Как я могу построить класс, когда суперкласс использует @Inject?

public abstract class AbstractClass<T> { 

final A a; 

@Inject 
AbstractClass(A a) { 
    this.a = a; 
} 
} 

public class B extends AbstractClass<C> { 

    final D d; 

    @Inject 
    B(D d) { 
    super(); // this fails 
    this.d = d; 
    } 

} 

Мои class B расширяет AbstractClass и AbstractClass использует @Inject впрыснуть A в него. В классе B я не могу позвонить super(), потому что AbstractClass имеет аргумент в конструкторе. Как я могу обработать инъекцию зависимостей суперкласса в подклассе, чтобы получить super()?

Как я могу построить класс, когда суперкласс использует @Inject?

+0

Извините, был исправлен AbstractClass. – confile

ответ

4

Вы должны принять A, а также:

@Inject 
B(A a, D d) { 
    super(a); 
    this.d = d; 
} 

Затем Guice следует вводить как A и D, и вы просто передать A до конструктора суперкласса. Просто потому, что конструктор помечен @Inject, это не значит, что только будет вызываться Guice ... Фактически, я бы фактически удалил @Inject от AbstractClass - если у Guice нет какой-то магии, о которой я не знаю, это не значит чтобы иметь возможность вводить это так или иначе.

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