Heim > Java > javaLernprogramm > Was ist der Hauptunterschied zwischen „HashMap map = new HashMap();' und „Map map = new HashMap();' in Java?

Was ist der Hauptunterschied zwischen „HashMap map = new HashMap();' und „Map map = new HashMap();' in Java?

Susan Sarandon
Freigeben: 2024-11-27 14:00:14
Original
676 Leute haben es durchsucht

What is the key difference between `HashMap map = new HashMap();` and `Map map = new HashMap();` in Java?

Unterscheidung zwischen HashMap und Map in Java

Beim Definieren von Karten in Java können Benutzer auf Variationen stoßen wie:

HashMap<String, Object> map = new HashMap<String, Object>();
Map<String, Object> map = new HashMap<String, Object>();
Nach dem Login kopieren

Zugrunde Objekt

Trotz dieser Unterschiede führen beide Kartendeklarationen zum gleichen zugrunde liegenden Objekt: a HashMap. Der Unterschied liegt in der Schnittstelle, über die auf das Objekt zugegriffen wird.

Schnittstellenunterschied

Im ersten Fall ist der Schnittstellentyp HashMap, der bereitstellt Direkter Zugriff auf HashMap-spezifische Methoden. Im zweiten Fall ist der Schnittstellentyp Map und bietet eine allgemeinere Schnittstelle zur zugrunde liegenden HashMap.

Codierung für Schnittstellen

Im Allgemeinen ist es Es wird empfohlen, auf die abstrakteste Schnittstelle (Map hier) zu codieren und nicht auf eine bestimmte Implementierung (HashMap). Dies ermöglicht Flexibilität beim Ändern der zugrunde liegenden Implementierung, ohne den vorhandenen Code zu beschädigen.

Beispiel für einen Vertragsbruch

Stellen Sie sich eine Klasse Foo mit zwei HashMaps vor:

class Foo {
    private HashMap<String, Object> things;
    private HashMap<String, Object> moreThings;

    // Getters and methods using HashMaps
}
Nach dem Login kopieren

Eine Unterklasse SpecialFoo verwendet Dinge und weitere Dinge über Methoden, die erwarten HashMaps:

class SpecialFoo extends Foo {
    // Methods using HashMaps
}
Nach dem Login kopieren

Wenn Foo später aktualisiert wird, um TreeMaps anstelle von HashMaps zu verwenden, ändert sich die Typsignatur von Things and moreThings. Infolgedessen bricht SpecialFoo ab, weil es HashMaps erwartet, jetzt aber TreeMaps empfängt.

Lösung: Sammlungen als Schnittstellen deklarieren

Um solche Vertragsverletzungen zu verhindern, deklarieren Sie die Sammlungen als möglichst abstrakte Schnittstelle:

class Foo {
    private Map<String, Object> things;
    private Map<String, Object> moreThings;

    // Getters and methods using Maps
}
Nach dem Login kopieren

Dieser Ansatz stellt sicher, dass SpecialFoo nicht kaputt geht, wenn Foo's Implementierungsänderungen.

Vorteile der Codierung für Schnittstellen

  • Erhöhte Flexibilität und Wartbarkeit
  • Reduziertes Risiko von Vertragsbrüchen
  • Einhaltung von Software-Designprinzipien (z. B. Kapselung, Abhängigkeit). Inversion)

Obwohl die beiden Kartendeklarationen unterschiedlich aussehen können, führen sie zu demselben zugrunde liegenden Objekt. Best Practices schreiben die Codierung für die abstrakteste Schnittstelle vor, um die Flexibilität zu wahren und Codefehler zu verhindern.

Das obige ist der detaillierte Inhalt vonWas ist der Hauptunterschied zwischen „HashMap map = new HashMap();' und „Map map = new HashMap();' in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage