Создание элемента MembersInjector для . Предпочитают вместо этого запускать процессор кинжала над этим классом

У меня есть эти предупреждения, и я не понимаю, что они означают. Может ли кто-то мне что-то сказать?

Для классов, которые я вставляю в (где есть оператор component.inject(this) )

 Note: Generating a MembersInjector for [class] Prefer to run the dagger processor over that class instead. 

Для объекта я закачиваю (constuctor, аннотированный с помощью @Inject )

 Note: Generating a Provider for [class]. Prefer to run the dagger processor over that class instead. 

Solutions Collecting From Web of "Создание элемента MembersInjector для . Предпочитают вместо этого запускать процессор кинжала над этим классом"

Когда процессор аннотаций Dagger запускается, он генерирует два типа классов:

  1. Реализации интерфейсов @Component
  2. Provider и MembersInjector для каждого типа @Inject 'd.

Хотя он @Component реализацию интерфейса @Component , он соединяет каждую из реализаций Provider и MembersInjector соответствии с настройками ваших модулей. Если ваш компонент или любой из модулей в нем ссылаются на @Inject 'd, который был скомпилирован без процессора Dagger, он все равно будет генерировать Provider или MembersInjector , но один раз для каждого компонента, а не для класса @Inject ' d.

Это не проблема (следовательно, это не предупреждение или ошибка), но это означает, что потенциально возможно, что процессор Dagger будет генерировать одни и те же классы много раз для одного приложения. Это может замедлить компиляцию, если и займет немного больше байт-кода, если он действительно выходит из-под контроля.

Простое исправление заключается в том, чтобы убедиться, что вы используете обработчик аннотаций Dagger при компиляции типов @Inject 'd, а также ваших компонентов.

Я получал это предупреждение "Generating a MembersInjector for..." Dagger 2, когда у меня был суперкласс и подкласс следующим образом …

 public abstract class BaseActivity extends Actvity { @Inject DependencyA dependencyA; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ((MyApplication) getApplication()).getComponent().inject(this); } public class ConcreteActivity extends BaseActvity { @Inject DependencyB dependencyB; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ((MyApplication) getApplication()).getComponent().inject(this); } } 

… и мой интерфейс Component имел два метода впрыска следующим образом …

 void inject(BaseActivity activity); void inject(ConcreteActivity activity); 

Я удалил метод inject(BaseActivity activity) из моего интерфейса Component и я удалил вызов метода Component.inject(this) из класса BaseActivity . Инъекция в BaseActivity прежнему работает так, как ожидается, когда подкласс ( ConcreteActivity ) вызывает Component.inject(this) и я больше не вижу предупреждения "Generating a MembersInjector for..." Dagger 2 при создании приложения.