我在一些GWT应用程序中工作,在该应用程序中我有一个层次结构,我有一个抽象的演示者,它具有一些派生类的常用功能。类似的东西:
public abstract class MyAbstractPresenter<T extends MyAbstractPresenter.CustomDisplay> extends Presenter<T>
{
public interface CustomDisplay extends View
{
//some methods
}
//I want to inject this element
@Inject
private CustomObject myObj;
public MyAbstractPresenter(T display)
{
super(display);
}
}
所有子类都被正确注入。但是,我希望能够注入该特定字段,而无需将其添加到子类的构造函数中。我试图按照你的意思进行现场注射,但它不起作用,因为它是被注入的子类。
是否有正确的方法来实现此注入而不让子类知道该字段的存在?
答案 0 :(得分:1)
显然,目前在GIN中不支持这种行为。解决方法是在具体类构造函数中注入必需字段,即使它们不需要它也是如此。类似的东西:
public abstract class MyAbstractPresenter<T extends MyAbstractPresenter.CustomDisplay> extends Presenter<T>
{
public interface CustomDisplay extends View
{
//some methods
}
//I wanted to inject this element
private final CustomObject myObj;
public MyAbstractPresenter(T display, CustomObject obj)
{
super(display);
myObj = obj;
}
}
然后在扩展这个抽象实现的任何类中,我都必须在构造时传递它。
public abstract class MyConcretePresenter extends MyAbstractPresenter<MyConcretePresenter.CustomDisplay>
{
public interface CustomDisplay extends MyAbstractPresenter.CustomDisplay
{
//some methods
}
@Inject //it would get injected here instead.
public MyConcretePresenter(CustomDisplay display, CustomObject obj)
{
super(display, obj);
}
}