2016-05-11 6 views
0

У меня есть карта foo, как указано ниже.Вложенная Java-карта Декларация карты - что внутри Карта конкретного типа

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

Поскольку я не хочу, типа данных взгляда, раскрывающий типа конкретных данных, так что я не объявлю его как:

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

Моих вопросы то, что фактический тип внутренней карты ? Если я хочу, чтобы внутренняя карта была такой же, как и внешняя, (ConcurrentSkipListMap). Как мне это сделать, не подвергая конкретный тип данных?

+1

Вы только что создали пустую 'ConcurrentSkipListMap', которая отображает' String' на другую 'Map'. Фактический тип зависит от того, что вы вкладываете в него. – Kayaman

ответ

1

Вы указали внешнюю карту как Map, а не ConcurrentSkipListMap, чтобы скрыть ее реализацию - вы можете сделать то же самое с внутренней картой.

(наружный) карты вы создали пустой - единственная известная вещь об этом является то, что он отображает String в Map (любой класс, реализующий Map), поэтому ваш вопрос неправильно - нет фактической внутренней карты (не но все равно), и единственное, что вы знаете об этом без каких-либо проверок, это то, что это Map<String, Bar>

Следует отметить, что, если у вас нет особых требований, требующих использования конкретных реализаций, вы должны использовать интерфейсы для объявления переменных.

Смежные вопросы