クラスとメソッドを静的にできるのはいつですか?
誰でもいくつかの例で私を助けてください...
4 に答える
静的メソッドはクラスに属しているため、特定のインスタンスには属していません。プログラミング言語をメッセージディスパッチの観点から考えると、関数の名前が実際の動作に対応しているため、手続き型プログラミングはメッセージディスパッチのレベルを 1 つしか提供しないと言えます。オブジェクト指向プログラミングでは、オブジェクトと関数 (メソッド) のシグネチャを指定する必要があるため、2 レベルのメッセージ ディスパッチがあります。同じ関数でも、オブジェクトの状態 (サブクラスのオーバーライドされたメソッドなど) に応じて、異なるオブジェクトで異なる動作をする場合があります。代わりに、静的メソッドは、必要な場所と方法で実行でき、常に同じ動作をするグローバル関数のようなものです。
したがって、静的メソッドが役立つ場合もありますが、静的メソッドの使用を制限することができます。Singleton パターン (http://it.wikipedia.org/wiki/Singleton) では、Singleton のインスタンスを取得するために静的メソッドが必要です (それを追跡するには、プライベートな静的属性も必要です)。
シングルトンは悪であり、常に Google Guice を介して依存性注入を使用する必要があると主張する人のために、Guice は静的メソッドに依存して、たとえばインジェクターを作成します (http://lowcoupling.wordpress.com/2012/12/05/dependency-injection /)。
したがって、最善の答えは、直面している問題がオブジェクトの注入によって解決される可能性があるかどうかを常に考える必要があると思いますが、静的メソッドの使用がかなり合理的な場合があります。
そのメソッドを呼び出すためにクラス インスタンスが必要ない場合。メソッドがクラスの非静的メンバーに依存しないことを意味します
クラスの非静的メンバーを使用しない場合は、メソッドを静的にすることができます。
クラスに静的メンバーのみが含まれている場合は、クラスを静的にすることができます。
メソッドが変更されない場合、その動作は、それを囲むクラスのさまざまなオブジェクトに基づいています。マークすることができますstatic
。
Math
クラスを確認します。そのメソッドはすべてstatic
原因であり、それらの動作はメソッド内の引数に依存するだけであり、それらのメソッドはクラスの状態を変更しません。
すべてのユーティリティ/ヘルパー メソッドは、 としてマークできます (マークする必要があります) static
。つまり、それらの動作がすべてのオブジェクトで同じである場合、オブジェクトごとに異なるコピーを使用する理由は、1 つのコピーだけを使用して、すべてのオブジェクトが同じコピーを共有できるようにするためです。
これも確認する必要があります: Java でクラスを static として宣言できないのはなぜですか?