2016-05-11 4 views
0

Ich habe eine Karte foo wie unten erklärt.Java verschachtelte Map-Deklaration - was ist inner Map konkrete Art

private final Map<String, Map<String, Bar>> foo = new ConcurrentSkipListMap<String, Map<String, Bar>>(); 

Da ich den Datentyp Blick nicht den konkreten Datentyp aussetzt wollen, so habe ich erkläre es nicht so:

private final Map<String, ConcurrentSkipListMap<String, Bar>> foo = new ConcurrentSkipListMap<String, ConcurrentSkipListMap<String, Bar>>(); 

Meine Fragen ist, was die tatsächliche Art der inneren Karte ist ? Wenn ich möchte, dass die innere Karte denselben Typ hat wie die äußere (ConcurrentSkipListMap). Wie soll ich das machen, ohne den konkreten Datentyp anzugeben?

+1

Sie haben gerade eine leere 'ConcurrentSkipListMap' erstellt, die eine' String' auf eine andere 'Map' abbildet. Der tatsächliche Typ hängt davon ab, was Sie hineinlegen. – Kayaman

Antwort

1

Sie haben die äußere Karte als Map im Gegensatz zu ConcurrentSkipListMap deklariert, um ihre Implementierung zu verbergen - Sie können genau das gleiche mit der inneren Karte tun.

Die (äußere) Sie erstellt map haben, ist leer - die nur über sie bekannt ist, dass es Karten String-Map daher Ihre Frage ist falsch (jede Klasse Map Implementierung) - es gibt keine tatsächliche innere Karte (nicht dennoch, und die einzige Sache, die Sie darüber ohne irgendwelche Überprüfungen wissen, ist, dass es ein Map<String, Bar>

ist Es ist erwähnenswert, dass, wenn Sie sehr spezifische Anforderungen haben, die die Verwendung bestimmter Implementierungen erfordern, sollten Sie Schnittstellen zum Deklarieren von Variablen verwenden.