2009-05-16 14 views

答えて

12

通常のJavaプログラミングでは実際にはありません。

しかし、依存性注入を使って広範囲に作業しているのであれば、静的メソッドはほとんどないでしょう。このような状況では、静的メソッドを持つユーティリティクラスはほんのわずかしかなく、他の静的メソッドはほとんどありません。

-1

特にシングルトンを扱っているとは思いません。

8

いいえ、間違っていません。たとえば、よく使用されるのは、クラス定義に静的ファクトリメソッドを持たせることです。

4

静的なutilsクラスを作成するのはうれしいことです。特に、まだ問題のドメインについて学習しているので、デザインが何であるべきかはまだ分かりません。

スタティックは「まだ適切に設計された」マーカーです。しばしば静的な解決策は完全に適切です。しかし、プロジェクトが進展するにつれて、 "全体的な部分"を書き直さなければならないことが分かっていますが、(後の段階で)問題のドメインをより完全に理解しているため、実際にこれらの問題に対する「適切な解決策」。

私たちプログラマーは、「再加工」について不公平に自分たちを苦しめていると思います。作業を適切に理解するためには、作業を適切に行う必要があります。私はこのキャッチ22を通過する方法を参照してください。

私はコアAPIから多くの静的な例を挙げることができます。 java.lang.Math、java.util.Arrays、java.util.Collections。しかし、これらのクラスは静的メソッドの束を提供するためだけに存在する "utilsクラス"であることに注意してください。 IMHO、 "ステートフルオブジェクト"内の静的メソッドの存在は、リファクタリングされるようにと要求されています。

今日私は、APIデザイナーがInteger(および他のラッパークラス)を分割できることを愛するだろうと信じています。しかし、彼らはうまくいきました。それは、それ自体の警告です...その静的は最終的なことを暗示しています、そして、C++と違ってJavaのメソッドはデフォルトでであるをオーバーライドすることができる良い理由があります。静的なものは本質的に非静的なものよりも「拘束力がある」ものです...他の状況や文脈などに実装を適用することはできません。キース。

+0

"ステートフルオブジェクト"では、静的メソッドをどのようにリファクタリングする傾向がありますか?ヘルパー/ utilクラスに移動するか、非静的にするだけですか? (プライベートヘルパーメソッドはどうですか?インスタンスフィールドを使用しているかどうかにかかわらず非静的にしますか?) – Jonik

+0

メソッドが状態を必要としない場合、私は最後に行うことはありません。なぜなら、そのメソッドを読んだり書いたり編集したりすることはクラスの状態を心配する必要があったからです(かなり大きなチャンクになる可能性があります)。クラスを「ステートフル」とヘルパーに分割する方が好きです。私の現在のC#プロジェクトを見てください。GmlReader(google GML)はpublic static IGeometry ReadGeometry(XmlReader reader)という静的なutilsクラスです。多くの人々は、シリアライズとデシリアライズをDTOに組み込み、複数のフォーマットにうまく適合しません。ちょうど私がそれを行う方法。 YMMV。 – corlettk

0

同じ名前の同じクラスに静的メソッドと非静的メソッドを持つことは悪い考えです。これは非常に混乱する可能性があります。この場合、名前を異ならせることをお勧めします。

同様に、名前は同じですが大文字と小文字の異なるメソッド、または同じクラスのクラスと同じ名前のメソッドを作成しないでください。両方とも合法であり、JDKでも発生しますが、IHMOを混乱させます。

関連する問題