Dagger2中的静态提供方法

时间:2016-07-27 08:18:04

标签: dependency-injection dagger-2

为什么要在提供方法之前使用static修饰符?

即使我删除了静态修饰符,dagger2也能正常工作。

@Provides static Pump providePump(Thermosiphon pump) {
    return pump;
}

1 个答案:

答案 0 :(得分:10)

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

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

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

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