о dagger2's тип удержания [дубликат]

В RegEx {i,f} означает, что «между i и f соответствует». Давайте посмотрим на следующие примеры:

  • {3,7} означает от 3 до 7 соответствий
  • {,10} означает до 10 совпадений без нижнего предела (т.е. нижний предел равен 0)
  • {3,} означает не менее 3 совпадений без верхнего предела (т.е. верхний предел бесконечен)
  • {,} означает, что верхний предел или нижний предел для количество совпадений (т. е. нижний предел равен 0, а верхний предел бесконечен)
  • {5} означает ровно 4

Большинство хороших языков содержат сокращения, RegEx:

  • + является сокращением для {1,}
  • * является сокращением для {,}
  • ? является сокращенное значение для {,1}

Это означает, что + требует не менее 1 совпадения, в то время как * принимает любое количество совпадений или не имеет совпадений вообще, а ? принимает не более 1 совпадающие или нулевые.

Кредит: Codecademy.com

6
задан netimen 31 March 2016 в 10:46
поделиться

1 ответ

Хотя я не знаю точно, я бы предположил, что у Scopes обязательно есть сохранение во время выполнения, потому что JSR 330's @Scope требует, чтобы облавы имели время хранения во время выполнения. ( @Qualifier имеет такое же ограничение.) Оба Dagger 1 и Dagger 2 рекламируют совместимость JSR-330, и (как упоминает David в комментариях) существует много времени выполнения которые должны были бы абсолютно требовать аннотации аннотаций, сохраненных во время выполнения.

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


Редактировать комментарии + Android multidex caveat

Это не обязательно проблема, унаследованное или иное: многие системы DI настраиваются во время выполнения и требуют аннотации. Кинжал примечателен тем, что он этого не делает, но спецификация не была написана таким образом, чтобы удержание времени исполнения было необязательным. Это освобождает разработчиков приложений вместо Dagger с другой структурой JSR330, такой как Guice или Spring, и освобождает разработчиков библиотек, чтобы сделать совместимые с DI-совместимыми инструментами или фреймворками агностики, независимо от того, настроены ли они во время компиляции или настройки времени выполнения. Эта спецификация (т. Е. Без вариантов реализации) и гибкость (время компиляции или время выполнения), по-видимому, стоят затрат на ненужное сохранение аннотации и стоимость обучения.

Однако этот может проблема в крупных приложениях для Android, потому что Android по умолчанию по умолчанию сохраняет аннотированные классы в главном дескрипторе ; более старые версии Android не загружают аннотации времени выполнения, если аннотированный класс находится во вторичном dex. Подробнее см. В эту ошибку , связанную с keepRuntimeAnnotatedClasses docs . Хотя вы могли бы рассмотреть эту проблему с кинжалом из-за применимости Dagger к большим приложениям для Android, это скорее ошибка с обработкой аннотаций Android, для которой Кинжал должен будет расходиться с спецификацией JSR-330, чтобы справиться с ней.

4
ответ дан Jeff Bowman 17 August 2018 в 10:33
поделиться
  • 1
    Значит, это похоже на унаследованную проблему? Это не упрощает изучение использования кинжала 2. – Marian Paździoch 27 April 2016 в 09:57
  • 2
    Спасибо, ты много помог. – Marian Paździoch 28 April 2016 в 06:07
Другие вопросы по тегам:

Похожие вопросы: