0

重複の可能性:
Java で変数がインターフェイス名で宣言されるのはなぜですか?
リストは具体的な実装にどのようにキャストする必要がありますか?

例:

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

ありがとう。

4

4 に答える 4

3

これは通常、後で別の実装に交換してもコードが同じように動作するようにするためです。たとえば、 a のTreeMap代わりに aを使用することにした場合HashMap、インスタンス化の手順を変更するだけで、コードの残りの部分は問題なく動作します。

于 2012-08-18T16:39:19.063 に答える
3

これは、インターフェースへのプログラミングと呼ばれるプログラミングの実践です。

于 2012-08-18T16:39:39.890 に答える
1

TreeMap基本クラス ie を使用するため、コードの残りの部分に影響を与えることなく、実装を切り替えることができます (たとえば、例では a に切り替えます) Map
コードを分離し、具体的な実装の代わりにインターフェイスに対してコーディングすることは、プログラミングの優れたプラクティスと見なされます。

于 2012-08-18T16:44:23.517 に答える
1

契約による設計または「インターフェイスへのプログラミング」は、コードがインターフェイスによって公開されたプロパティ/メソッドのみを使用することを保証する原則であり、さらに重要なことに、常に 1 つのプライマリ インターフェイスを使用することです。一度に複数のインターフェースを使用している場合、それは通常、より緊密な結合の兆候です。

一般に、オブジェクトをコード内で直接インスタンス化しないでください。使用する実装の変更を 1 か所で行えるように、そのジョブを外部エンティティに委任する必要があります。

Dr Dobb's Journal の記事で、「new」キーワードを禁止する必要がある (正確なタイトルは「new is verboten」のようなものでした) が、今のところリンクが見つかりません。

于 2012-08-18T16:50:27.373 に答える