Я пытаюсь реализовать инъекцию зависимостей в моем приложении с помощью кинжала. У меня есть структура, аналогичная структура описан в "Simpler Android apps with Flow and Mortar"Ошибка кинжала: не удается ввести нестатический внутренний класс
У меня есть DayScreen
класса:
@Layout(R.layout.day)
public class DayScreen extends DateScreen {
LocalDate date;
public DayScreen(LocalDate date) { this.date = date; }
@Override public String getMortarScopeName() { return getClass.getName(); }
@Override public Object getDaggerModule getModule() { retrun new Module(); }
@dagger.Module(addsTo = UiModule.class, injects = DayView.class, complete = false, library = true)
public class Module {
@Inject RestService api;
@Inject DateTimeFormatter formatter;
@Provides @Named("DayScreenDate") LocalDate provideDate(){
return date;
}
}
@Singleton
public class Presenter extends ViewPresenter<DayView> {
//@Inject RestService api;
//@Inject DateTimeFormatter formatter;
RestService api;
DateTimeFormatter formatter;
@Inject Presenter(RestService api, DateTimeFormatter formatter){
this.api = api;
this.formatter = formatter;
}
@Override
protected void onLoad(Bundle savedInstanceState) {
super.onLoad(savedInstanceState);
api.statisticsDay(DayScreen.this.date.format(formatter))
.observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(
resp -> getView().setData(resp.events),
err -> Log.e(TAG, err.getLocalizedMessage()),
() -> Log.v(TAG, "day stats received")
);
}
}
Здесь DateScreen
является абстрактным:
public abstract class DateScreen implements Blueprint {
protected LocalDate date;
public DateScreen() { this(LocalDate.now()); }
public DateScreen(LocalDate date) { this.date = date; }
public LocalDate getDate() { return date; }
public void setDate(LocalDate date){ this.date = date; }
}
Я попытался придать api
и formatter
в модуле и в Presenter через инжектор конструктора и впадины, но он испытывает ту же ошибку error: Can't inject a non-static inner class:...
Кто-нибудь знает, зачем нужен статический класс? Существуют ли какие-либо изменения, которые делают статью, о которой упоминается выше, не имеет значения?
Спасибо.
жаль, что забыл упомянуть, что это ошибка времени компиляции , они не могут быть созданы при компиляции. см. Класс 'AlbumScreen' в статье I, упомянутой в вопросе. Существуют внутренние нестатические классы 'Module' и' Presenter'. –
Во время компиляции классы не создаются. Я не следую за тобой. –
Вы написали: «Нестатические классы требуют экземпляра для экземпляра, который будет создан». Но во время компиляции возникает ошибка, как это может потребовать экземпляр. –