Dagger2 中的静态提供方法

Static provide method in Dagger2

为什么要在provide方法前使用static修饰符?

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

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

两种风格都可以;是否将方法保持静态完全取决于您和您的正常 "should this be a static method" 普通旧 Java 判断。这里,pump 对模块实例没有任何用处,因此该方法很容易成为静态方法。

静态方法调用速度更快,particularly in Android,因为它们避免了虚拟方法 table 查找。这也可能使编译器、JIT 运行时或静态分析工具更容易内联它们。我猜你会通过 class 或方法 final.

来获得类似的优势

考虑到静态方法不能受实例字段约束,可读性也可能略有提高,但这取决于您。

如果您确信您的@Provides 方法的行为不会改变,包括在测试中,那么您可以利用performance/readability 增加。但是,如果您需要引用模块状态或希望允许 subclass/testing 覆盖,那么实例方法必然是正确的调用。