静的メソッドと非静的メソッドを同じクラスに持つのは間違っていますか?静的メソッドと非静的メソッドを同じクラスに持つのは間違っていますか?
答えて
通常のJavaプログラミングでは実際にはありません。
しかし、依存性注入を使って広範囲に作業しているのであれば、静的メソッドはほとんどないでしょう。このような状況では、静的メソッドを持つユーティリティクラスはほんのわずかしかなく、他の静的メソッドはほとんどありません。
特にシングルトンを扱っているとは思いません。
いいえ、間違っていません。たとえば、よく使用されるのは、クラス定義に静的ファクトリメソッドを持たせることです。
静的なutilsクラスを作成するのはうれしいことです。特に、まだ問題のドメインについて学習しているので、デザインが何であるべきかはまだ分かりません。
スタティックは「まだ適切に設計された」マーカーです。しばしば静的な解決策は完全に適切です。しかし、プロジェクトが進展するにつれて、 "全体的な部分"を書き直さなければならないことが分かっていますが、(後の段階で)問題のドメインをより完全に理解しているため、実際にこれらの問題に対する「適切な解決策」。
私たちプログラマーは、「再加工」について不公平に自分たちを苦しめていると思います。作業を適切に理解するためには、作業を適切に行う必要があります。私はこのキャッチ22を通過する方法を参照してください。
私はコアAPIから多くの静的な例を挙げることができます。 java.lang.Math、java.util.Arrays、java.util.Collections。しかし、これらのクラスは静的メソッドの束を提供するためだけに存在する "utilsクラス"であることに注意してください。 IMHO、 "ステートフルオブジェクト"内の静的メソッドの存在は、リファクタリングされるようにと要求されています。
今日私は、APIデザイナーがInteger(および他のラッパークラス)を分割できることを愛するだろうと信じています。しかし、彼らはうまくいきました。それは、それ自体の警告です...その静的は最終的なことを暗示しています、そして、C++と違ってJavaのメソッドはデフォルトでであるをオーバーライドすることができる良い理由があります。静的なものは本質的に非静的なものよりも「拘束力がある」ものです...他の状況や文脈などに実装を適用することはできません。キース。
同じ名前の同じクラスに静的メソッドと非静的メソッドを持つことは悪い考えです。これは非常に混乱する可能性があります。この場合、名前を異ならせることをお勧めします。
同様に、名前は同じですが大文字と小文字の異なるメソッド、または同じクラスのクラスと同じ名前のメソッドを作成しないでください。両方とも合法であり、JDKでも発生しますが、IHMOを混乱させます。
- 1. 静的クラスと静的メソッド
- 2. 静的メソッドと非静的メソッドの同期ブロック
- 3. スレッド内の静的同期と非静的同期メソッドの違い
- 4. 静的メソッドで静的メソッドと非静的メソッドにアクセスする方法
- 5. 低レベルの違い:静的メソッドを使用した非静的クラスと静的メソッドを使用した静的クラスとの比較
- 6. 非静的フィールドは静的、コンテキストMainメソッド
- 7. 静的クラスで非静的メソッドを実装する方法は?
- 8. 静的/非静的メソッドの問題
- 9. 静的メソッドのみを持つクラスは静的であるべきですか?
- 10. PHP - 静的メソッドと非静的メソッドを宣言できますか?
- 11. Mockito:、私はmockitoから何かを(静的または非静的メソッド)模擬することができません静的&非静的メソッド
- 12. 静的メソッドで非静的GetType()を呼び出しますか?
- 13. 静的メソッド内のローカル変数は、静的ていますか?
- 14. 静的メソッドのクラスのコンストラクタ
- 15. のdllexportクラスの静的メソッド
- 16. Pythonクラスの静的メソッド
- 17. クラス内のWCF静的メソッド
- 18. マルチスレッドアプリケーションの静的クラス/メソッド
- 19. F#クラス内の静的メソッド
- 20. Spring MongoDB:Criteriaメソッド非静的アクセス
- 21. 静的メソッドから非静的オブジェクトを変更する
- 22. リポジトリを持つドメイン/モデルオブジェクトの静的メソッド
- 23. 静的メソッドと静的変数のjava
- 24. クラスと派生クラスのインスタンスは、非静的メソッドを介して間接的にクラスの静的メンバーを変更することができます。#
- 25. 二重コロンの使用 - 静的メソッド参照と非静的メソッド参照の違い
- 26. 静的メソッドから非静的メンバー変数へのアクセス
- 27. 静的クラスに非静的メソッドと変数を使用できないのはなぜですか?
- 28. なぜ静的メソッドは、私はエラーを得た静的メソッドの内部から、通常のメソッドを呼び出そうとしている間だけの静的メソッドではない非静的メソッド
- 29. 静的メソッドに非静的戻り値を組み込む?
- 30. インスタンスのみを持つクラスの静的メソッドを呼び出す
"ステートフルオブジェクト"では、静的メソッドをどのようにリファクタリングする傾向がありますか?ヘルパー/ utilクラスに移動するか、非静的にするだけですか? (プライベートヘルパーメソッドはどうですか?インスタンスフィールドを使用しているかどうかにかかわらず非静的にしますか?) – Jonik
メソッドが状態を必要としない場合、私は最後に行うことはありません。なぜなら、そのメソッドを読んだり書いたり編集したりすることはクラスの状態を心配する必要があったからです(かなり大きなチャンクになる可能性があります)。クラスを「ステートフル」とヘルパーに分割する方が好きです。私の現在のC#プロジェクトを見てください。GmlReader(google GML)はpublic static IGeometry ReadGeometry(XmlReader reader)という静的なutilsクラスです。多くの人々は、シリアライズとデシリアライズをDTOに組み込み、複数のフォーマットにうまく適合しません。ちょうど私がそれを行う方法。 YMMV。 – corlettk