Имеет ли значение порядок, в котором @Provides написано? - PullRequest
0 голосов
/ 20 февраля 2019

Имеет ли значение порядок предоставления A и Обеспечить B в следующем примере?Как какой метод должен быть написан первым?Если не с функциональной точки зрения, имеет ли это значение с точки зрения передовой практики?

@Singleton
@Provides
@Inject
A provideA(ExampleClass1<B> example1, ExampleClass2 example2) {
    return new A(example1, example2);
}

@Provides
@Singleton
@Inject
B provideB(A a) {
    return new B(new C(a));
}

1 Ответ

0 голосов
/ 20 февраля 2019

Нет, порядок методов не имеет значения.

Важны тип возврата и аннотации.Остальные (имя метода, местоположение метода и параметры метода) не имеют значения.

Тип возврата важен, потому что это тип инъекции и то, что вы будете предоставлять.Аннотации важны, потому что они говорят вам, как должен быть сконфигурирован провайдер.

Порядок метода не имеет значения, потому что он не предсказуем, и вы можете написать methodA до methodB, но компилятор можетрешите, что он записывает methodB перед methodA в вашем файле .class.Это не так, как в C, где вы должны (по крайней мере) объявить метод, который вы будете использовать перед их использованием.

В том же духе, имя метода и параметры (или даже ... порядок параметров) не имеют значения.Сегодня у вас может быть метод провайдера с именем foo(A a, B b), завтра вы можете изменить его на bar(X x, Y y), он будет по-прежнему вызываться с соответствующими параметрами.

Вы должны сохранять код читабельным

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

...