@Provides 的书写顺序重要吗?

Does the order in which @Provides written matter?

以下示例中 provideA 和 provideB 的顺序重要吗?比如应该先写哪个方法?如果不是从功能的角度来看,从最佳实践的角度来看是否重要?

@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));
}

不,方法的顺序无关紧要。

重要的是 return 类型和注释。其余的(方法名称、方法位置和方法参数)无关紧要。

return 类型很重要,因为它是注入类型,也是您要提供的类型。注释很重要,因为它们告诉您必须如何配置提供程序。

方法的顺序无关紧要,因为它不可预测,您可能会在 methodB 之前编写 methodA,但编译器可能会决定在 [=] 之前编写 methodB 10=] 在你的 .class 文件中。它不像在 C 语言中,您必须(至少)在使用它们之前声明您将使用的方法。

同样,方法名称和参数(甚至...参数顺序)并不重要。今天您可能有一个名为 foo(A a, B b) 的提供程序方法,明天您可能已将其更改为 bar(X x, Y y) 它仍会使用适当的参数调用。

您应该保持代码的可读性

关于最佳实践,请始终保持代码的可读性。因此,如果您有将所有提供者方法和所有辅助方法放在一起的约定,那就这样吧。如果您的团队说要最小化声明使用之间的距离,请使用它。如果您的代码约定要求按字母顺序倒序对方法进行排序,那么就照做。