为什么要在提供方法之前使用static修饰符?
即使我删除了静态修饰符,dagger2也能正常工作。
@Provides static Pump providePump(Thermosiphon pump) {
return pump;
}
答案 0 :(得分:10)
两种风格都有效;你是否保持方法静态完全取决于你和普通的“这应该是一个静态方法”判断普通旧Java。这里,pump
对模块实例没有任何用处,因此该方法很容易是静态的。
静态方法调用更快,particularly in Android,因为它们避免了虚方法表查找。这也可以使编译器,JIT运行时或静态分析工具更容易内联。我推测你通过制作课程或方法final
来开辟类似的优势。
由于静态方法不能受实例字段的影响,可读性也可能略有提高,但这取决于你。
如果您确信@Provides方法的行为不会发生变化(包括测试),那么您可以利用性能/可读性的提升。但是,如果您需要引用模块状态或希望允许子类/测试覆盖,那么实例方法必然是正确的调用。