Google Guava: Как использовать ImmutableSortedMap.naturalOrder? - PullRequest
3 голосов
/ 05 февраля 2011

Я использую Google Guava r08 и JDK 1.6.0_23.

Я хочу создать ImmutableSortedMap с помощью компоновщика.Я знаю, что могу создать конструктор следующим образом:

ImmutableSortedMap.Builder<Integer, String> b1 =
    new ImmutableSortedMap.Builder<Integer, String>(Ordering.natural());

, а затем использовать его для построения карт, например:

ImmutableSortedMap<Integer, String> map =
    b1.put(1, "one").put(2, "two").put(3, "three").build();

Я заметил, что у класса ImmutableSortedMap есть метод naturalOrder(), который возвращает Builder с естественным упорядочением.Однако, когда я пытаюсь вызвать этот метод, я получаю странные ошибки.Например, это приводит к странной «; ожидаемой» ошибке:

// Does not compile
ImmutableSortedMap.Builder<Integer, String> b2 =
    ImmutableSortedMap<Integer, String>.naturalOrder();

Каков правильный синтаксис для вызова метода naturalOrder()?

В документации API метода упоминается некоторый компиляторошибка.Это как-то связано с тем, что этот метод не работает?

edit

MForster ответ хороший.Но когда я отказываюсь от дженериков, я не могу сделать это "за один раз":

// Doesn't work, can't infer the types properly
ImmutableSortedMap<Integer, String> map =
    ImmutableSortedMap.naturalOrder().put(1, "one").put(2, "two").put(3, "three").build();

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

ImmutableSortedMap<Integer, String> map =
    ImmutableSortedMap.<Integer, String>naturalOrder().put(1, "one").put(2, "two").put(3, "three").build();

Ответы [ 2 ]

10 голосов
/ 05 февраля 2011

Правильный синтаксис:

ImmutableSortedMap.Builder<Integer, String> b2 =
    ImmutableSortedMap.<Integer, String>naturalOrder();

И вы можете вообще отказаться от дженериков, потому что в этом случае они выводятся:

ImmutableSortedMap.Builder<Integer, String> b2 =
    ImmutableSortedMap.naturalOrder();
5 голосов
/ 05 февраля 2011

Правильный синтаксис должен быть:

ImmutableSortedMap.Builder<Integer, String> b2 =
ImmutableSortedMap.<Integer, String>naturalOrder();

(обратите внимание, что общие параметры находятся за точкой, а не до)

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