我正在处理一些 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);
}
}
所有子类都被正确注入(inject)。但是,我希望能够注入(inject)该特定字段,而无需将其添加到子类的构造函数中。我尝试进行字段注入(inject),如您所见,但它不起作用,因为它是被注入(inject)的子类。
是否有一种正确的方法可以在不让子类知道该字段存在的情况下实现此注入(inject)?
最佳答案
显然,目前 GIN 还不支持这种类型的行为。解决方法是在具体类构造函数中注入(inject)所需的字段,即使它们不需要它。像这样的东西:
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);
}
}
关于java - 抽象类中字段的 GIN 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14563148/