GetMap
ist eine Methode, kein Attribut, so haben Sie es verweisen mit Klammer ()
:
h.GetMap().get("key")
Nun zweiten Fehler. Ihre Map<String, Map<String, String>
genannt wow
eine Werte enthält, die Objekte vom Typ sind Map<String, String>
so, bevor das erhalten, müssen Sie die Karte erhalten:
Map<String, String> m = (HashMap<String, String>) h.GetMap().get("key");
Und dann können Sie ausdrucken:
System.out.println(m.get("key2"));
Wenn Sie eine ONELINER wollen (ist nicht wirklich klar, aber überprüfen Sie die Erklärung in den Kommentaren):
System.out.println(((HashMap<String, String>) h.GetMap().get("key")).get("key2"));
// ↑ casting parenthesis ↑ (
// ↑ this say group IS a map and allow get() ↑
// ↑ system.out.println parenthesis ↑
HINWEIS: Änderung auch diese Erklärung
wow.put("key", new HashMap<String, Object>());
von
wow.put("key", new HashMap<String, String>());
FINAL Code:
public class Q37066776 {
public static void main(String[] args) {
Hash h = new Hash();
h.SetHash();
Map<String, String> m = (HashMap<String, String>) h.GetMap().get("key");
System.out.println(m.get("key2"));
}
}
class Hash {
private HashMap<String, HashMap<String, String>> wow = new HashMap<String, HashMap<String, String>>();
public void SetHash() {
wow.put("key", new HashMap<String, String>());
wow.get("key").put("key2", "val2");
}
public HashMap GetMap() {
return wow;
}
}
WORKING ONLINE DEMO
aber man kann immer besser
tun!: =)
Wie Andrew
- darauf können Sie Rückkehr des Verfahrens ändern,
Aber auch viele andere Dinge wie:
- mit weniger konkrete Objekte (
Map
anstelle von HashMap
)
- Folgekonventionen (
GetMap()
wäre getMap()
)
- Make
Hash
eine static
Klasse mit static
Block
Wenn ich Rewrite Code hätte, würde mein Ergebnis so aussehen:
public class Q37066776 {
public static void main(String[] args) {
System.out.println(Hash.getMap().get("key").get("key2"));
}
}
class Hash {
private static Map<String, Map<String, String>> wow = new HashMap<String, Map<String, String>>();
static {
wow.put("key", new HashMap<String, String>());
wow.get("key").put("key2", "val2");
}
public static Map<String, Map<String, String>> getMap() {
return wow;
}
}
Sie vermissen die Klammern auf dem Methodenaufruf 'GetMap()'. – Berger
Die Standardbenennungskonvention wäre auch, Methodennamen zu starten, einschließlich Getter mit einem Kleinbuchstaben. Außerdem sollten Sie die Typargumente im Rückgabetyp des Getters nicht ausblenden. Es gibt einige Typprüfungen, die der Compiler nicht so machen kann und auch das zweite 'get' wird nicht funktionieren, wenn Sie dies nicht tun (selbst nach dem Fixieren des Methodenaufrufs, wie von Berger erwähnt), da der Compiler nicht weiß Der Werttyp der Map ist eine Map. – fabian
Sie sollten auch vermeiden, die generischen Typen einer Sammlung doppelt auf die rechte Seite des Ausdrucks zu verweisen. Verwenden Sie stattdessen einen leeren Diamantoperator: 'private HashMap> wow = neue HashMap <>();' –
Lefteris008