Java の「HashMap map = new HashMap();」と「Map map = new HashMap();」の主な違いは何ですか?
Nov 27, 2024 pm 02:00 PMJava の HashMap と Map の区別
Java でマップを定義する場合、次のようなバリエーションに遭遇する可能性があります。
HashMap<String, Object> map = new HashMap<String, Object>(); Map<String, Object> map = new HashMap<String, Object>();
基礎オブジェクト
これらの違いにもかかわらず、両方ともマップされます宣言では、同じ基底オブジェクト、HashMap
インターフェイスの違い
最初の例では、インターフェイス タイプは HashMap<String, Object> であり、以下を提供します。 HashMap 固有のメソッドへの直接アクセス。 2 番目のインスタンスでは、インターフェイス タイプは Map インターフェイスのコーディング 一般に、特定の実装 (HashMap) ではなく、最も抽象的なインターフェイス (ここではマップ) をコーディングすることをお勧めします。これにより、既存のコードを壊すことなく、基礎となる実装を柔軟に変更できるようになります。 コントラクト違反の例 2 つの HashMap を持つクラス Foo を考えてみましょう: サブクラス SpecialFoo は、期待されるメソッドを介して things や moreThings を使用します。 HashMaps: Foo が後で HashMap の代わりに TreeMap を使用するように更新された場合、things および moreThings の型シグネチャが変更されます。その結果、SpecialFoo は HashMaps を予期していましたが、現在は TreeMap を受信しているため壊れます。 解決策: コレクションをインターフェイスとして宣言する このような契約違反を防ぐには、コレクションを宣言します。可能な限り最も抽象的なインターフェイスとして: このアプローチにより、SpecialFoo はFoo の実装が変更されても壊れません。 インターフェイスにコーディングする利点 したがって、2 つのマップ宣言は異なっているように見えますが、結果的には同じ基礎となるオブジェクトになります。ベスト プラクティスでは、柔軟性を維持し、コードの破損を防ぐために、最も抽象的なインターフェイスにコーディングすることが求められます。class Foo {
private HashMap<String, Object> things;
private HashMap<String, Object> moreThings;
// Getters and methods using HashMaps
}
class SpecialFoo extends Foo {
// Methods using HashMaps
}
class Foo {
private Map<String, Object> things;
private Map<String, Object> moreThings;
// Getters and methods using Maps
}
以上がJava の「HashMap map = new HashMap();」と「Map map = new HashMap();」の主な違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?

2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte

高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?
