Инициализировать 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 объясняет, что вам нужно делать.