Как мне создать пустой Guava ImmutableList?
Я могу создать гуавуImmutableList
с of
метод, и получит правильный универсальный тип на основе переданных объектов:
Foo foo = new Foo();
ImmutableList.of(foo);
Тем не менее, of
метод без параметров не может вывести общий тип и создает ImmutableList<Object>
,
Как я могу создать пустой ImmutableList
удовлетворить List<Foo>
?
3 ответа
Если вы назначаете созданный список переменной, вам не нужно ничего делать:
ImmutableList<Foo> list = ImmutableList.of();
В других случаях, когда тип не может быть выведен, вы должны написать ImmutableList.<Foo>of()
как говорит @zigg.
ImmutableList.<Foo>of()
создаст пустой ImmutableList
с универсальным типом Foo
, Хотя компилятор может выводить универсальный тип в некоторых обстоятельствах, например, при присваивании переменной, вам нужно использовать этот формат (как я это сделал), когда вы предоставляете значение для аргумента функции.
Начиная с Java 8, компилятор стал намного умнее и может определять параметры параметров типа в большинстве ситуаций.
Пример:
void test(List<String> l) { ... }
// Type checks in Java 8 but not in Java 7
test(ImmutableList.of());
объяснение
Новым в Java 8 является то, что целевой тип выражения будет использоваться для определения параметров типа его подвыражений. До Java 8 только аргументы методов, которые используются для вывода параметров типа. (В большинстве случаев одним исключением являются назначения.)
В этом случае тип параметра test
будет целевым типом для of()
и тип возвращаемого значения of
будет выбран в соответствии с этим типом аргумента.