прохождение ImmutableSet вместо Set? - PullRequest
0 голосов
/ 27 января 2010

У меня есть метод, который ожидает параметр Set. Я хочу передать пустой набор и не хочу никаких побочных эффектов в наборе.

Я могу сделать это с коллекциями, передав:

 Collections.unmodifiableSet(Sets.newHashSet())

Но я хочу передать:

 ImmutableSet.of()

Если я делаю первый, создается Set<Object>, и я получаю «метод, неприменимый для args Set». Если я делаю второй, я получаю ImmutableSet<Object>, и я получаю похожую ошибку.

Это работает:

 Collections.unmodifiableSet(new HashSet<String>())

... но кажется уродливым, и я хочу найти способ Google Collections.

Ответы [ 2 ]

9 голосов
/ 27 января 2010

Попробуйте это:

ImmutableSet.<String>of()

Это тоже будет работать:

Collections.<String>emptySet()

Этот синтаксис полезен для указания аргументов типа вручную каждый раз, когда вывод типа не выполняется. : -)

0 голосов
/ 30 января 2010

Это также будет работать:

public static void main(String[] args) {
    Set<String> emptySet = ImmutableSet.of();
    doStuffWith(emptySet);
}

static void doStuffWith(Set<String> strings) {
    // ...
}

потому что вывод типа замечает, что вы назначаете переменную Set<String> и знает, что параметр типа должен быть String.

...