Новый ConcurrentHashMap из нового ConcurrentHashMap

Я пытаюсь инициализировать ConcurrentHashMap из ConcurrentHashMapс

private final ConcurrentHashMap<
    String, 
    ConcurrentHashMap<String, Double>
> myMulitiConcurrentHashMap = new ConcurrentHashMap<
    String, 
    new ConcurrentHashMap<String, Double>()
>();

но javac дает

HashMapper.java:132: error: illegal start of type
    new ConcurrentHashMap<String, Double>()
    ^
HashMapper.java:132: error: '(' or '[' expected
    new ConcurrentHashMap<String, Double>()
        ^
HashMapper.java:132: error: ';' expected
    new ConcurrentHashMap<String, Double>()

указывая на второй new,

Как может myMulitiConcurrentHashMap быть newПравильно ли инициализированы?

3 ответа

Решение

Кстати, Java 7 теперь имеет более лаконичный синтаксис ("ромб"):

private final 
   ConcurrentHashMap<String, ConcurrentHashMap<String, Double>>
      myMulitiConcurrentHashMap =
         new ConcurrentHashMap<>();

Вы также сможете использовать интерфейсы с левой стороны:

private final 
   ConcurrentMap<String, ConcurrentMap<String, Double>>
      myMulitiConcurrentHashMap =
         new ConcurrentHashMap<>();

Вы не инициализируете внутренний ConcurrentHashMap<String, Double>; только следующее должно работать:

new ConcurrentHashMap<
    String, 
    ConcurrentHashMap<String, Double>
>();

Общими параметрами типа являются именно типы.
Не имеет смысла иметь Map<String, new SomeType()>,
Вам нужно просто написать тип второго параметра.

Перефразируя, вы создаете один new ConcurrentHashMap<K, V>(), который может содержать несколько внутренних карт позже.

Другие вопросы по тегам