Инициализировать ImmutableMap с явными типами?

Мне нужно инициализировать ImmutableMap (guava 21.0) и мне нужно разрешить его в Map>, для этого примера я просто буду использовать String.

Так что я:

import com.google.common.collect.ImmutableMap;
public class MyClass {
    private Map<String,String> testMap = 
         ImmutableMap<String,String>.builder().put("a","b").build();

и в этой последней строке я получаю огромное количество ошибок компилятора. Использование ImmutableMap<String,String>.of() получает тот же результат.

Если я удаляю, я просто получаю одну ошибку, несоответствие типов.

Как я могу использовать ImmutableMap для явной (литеральной) инициализации, когда мне нужна карта с явными типами?

2 ответа

Разместите общие типы после точки:

private Map<String, String> testMap = 
    ImmutableMap.<String, String>builder().put("a","b").build();

См . Замечательный раздел часто задаваемых вопросов по Generics Анжелики Лангер "Что такое явная спецификация аргумента типа?" Больше подробностей.

В случае, если вам не нужно использовать конструктор, нет необходимости также указывать параметры универсального типа.

Просто используйте:

Map<String, String> map = ImmutableMap.of("a", "b");

Параметры общего типа будут выведены компилятором.

Если, с другой стороны, вам нужно использовать конструктор, то ответ @Xaerxess объясняет, что вам нужно делать.

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