Dagger2中的静态提供方法

San*_*Lin 3 dependency-injection dagger-2

为什么要在提供方法之前使用static modifier?

即使我删除静态修改器,dagger2也能正常工作.

@Provides static Pump providePump(Thermosiphon pump) {
    return pump;
}
Run Code Online (Sandbox Code Playgroud)

Jef*_*ica 10

两种风格都有效; 你是否保持方法静态完全取决于你和普通的"这应该是一个静态方法"判断普通旧Java.这里,pump对模块实例没有任何用处,因此该方法可以很容易地是静态的.

静态方法调用更快,特别是在Android中,因为它们避免了虚拟方法表查找.这也可以使编译器,JIT运行时或静态分析工具更容易内联.我猜想你可以通过制作课程或方法来开辟类似的优势final.

鉴于静态方法不能受实例字段的影响,可读性也可能略有提高,但这取决于您.

如果您确信您的@Provides方法的行为不会发生变化,包括在测试中,那么您可以利用性能/可读性的增加.但是,如果您需要引用模块状态或想要允许子类/测试覆盖,那么实例方法必然是正确的调用.