提供メソッドの前に静的修飾子を使用する理由は何ですか?私が正しく動作dagger2 static修飾子を、削除していてもDagger2の静的提供メソッド
。
@Provides static Pump providePump(Thermosiphon pump) {
return pump;
}
提供メソッドの前に静的修飾子を使用する理由は何ですか?私が正しく動作dagger2 static修飾子を、削除していてもDagger2の静的提供メソッド
。
@Provides static Pump providePump(Thermosiphon pump) {
return pump;
}
両方のスタイルが機能します。静的メソッドを静的に保つかどうかは、完全にあなた次第です。普通の古いJavaでは、これは静的メソッドであるべきですか?ここでは、pump
はモジュールインスタンスには使用されないので、メソッドは簡単に静的にすることができます。
staticメソッドの呼び出し、彼らは仮想メソッドテーブルのルックアップを避けるため、より高速particularly in Androidです。これにより、コンパイラ、JITランタイム、または静的解析ツールをインライン化しやすくなります。私はクラスやメソッドを作ることで同様の利点を開くだろうと推測したいと思いますfinal
。
も静的メソッドは、インスタンスフィールドの対象にすることができないことを考えると可読性のわずかな改善があるかもしれませんが、それはあなた次第です。
@Providesメソッドの動作がであり、テストを含む変更がないと確信がある場合は、パフォーマンス/可読性の向上を利用できます。ただし、モジュールの状態を参照する必要がある場合、またはサブクラス/テストのオーバーライドを許可したい場合は、インスタンスメソッドが必ず正しい呼び出しである必要があります。
ご利用いただき、ありがとう、ご利用いただき、ありがとうございました。それは非常に明確です。私はこれを答えにします。 –
ええと、Daggerのドキュメントhttps://google.github.io/dagger//testing.htmlの静的メソッドを使用しています。下部に「@Provides static AuthManager authManager'」と表示されています。私は何かを欠いている? – arekolek
@arekolek間違いなしそのモジュールはFakeAuthModuleで、テストのために使用されますが、 "オプション2:コンポーネントの構成を分離する"に従ってテスト専用モジュールであるため、変更またはオーバーライドされません。最終的なテスト方法は、特に、「オプション1:モジュールのサブクラス化によるバインディングのオーバーライド(これをしないでください!)」を有効にすることです。私は同意しません:非常に速い、または制限されたオーバーライド(またはオーバーライド用に設計されたモジュール)以外に、別々のモジュール(および抽象的または静的な '@ Provides'メソッド)を使ってテストするために、 –
私は分かりません。私はドキュメントが実際にこの場合に横たわっていると思います。どのようにモックの静的プロバイダメソッドをオーバーライドするつもりですか?できません。したがって、静的な追加は正直にばかげているので、ドキュメントはそのようにするのに意味がありません。実際にはライブラリの使い方を教えてくれない "コーヒーの例"でも知られていますが、それは意味をなさない他のことをするのは不思議ではありません。/rant – EpicPandaForce