Google Guava:如何使用ImmutableSortedMap.naturalOrder?

Jes*_*per 3 java syntax guava

我正在使用Google Guava r08和JDK 1.6.0_23.

我想创建一个ImmutableSortedMap使用构建器.我知道我可以像这样创建构建器:

ImmutableSortedMap.Builder<Integer, String> b1 =
    new ImmutableSortedMap.Builder<Integer, String>(Ordering.natural());
Run Code Online (Sandbox Code Playgroud)

然后使用它来构建地图,例如:

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

我注意到该类ImmutableSortedMap有一个naturalOrder()返回Builder自然顺序的方法.但是,当我尝试调用此方法时,我会遇到奇怪的错误.例如,这给出了一个奇怪的"预期"错误:

// Does not compile
ImmutableSortedMap.Builder<Integer, String> b2 =
    ImmutableSortedMap<Integer, String>.naturalOrder();
Run Code Online (Sandbox Code Playgroud)

调用该naturalOrder()方法的正确语法是什么?

该方法的API文档提到了一些编译器错误.这与这种方法无关吗?

编辑

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();
Run Code Online (Sandbox Code Playgroud)

这确实有效:

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

MFo*_*ter 10

正确的语法是

ImmutableSortedMap.Builder<Integer, String> b2 =
    ImmutableSortedMap.<Integer, String>naturalOrder();
Run Code Online (Sandbox Code Playgroud)

你可以完全删除泛型,因为在这种情况下推断出它们:

ImmutableSortedMap.Builder<Integer, String> b2 =
    ImmutableSortedMap.naturalOrder();
Run Code Online (Sandbox Code Playgroud)

  • 有关"ImmutableSortedMap.<Integer,String> naturalOrder()"语法的更多信息:http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ402(显式类型参数规范) (3认同)

Bor*_*ris 5

正确的语法应该是:

ImmutableSortedMap.Builder<Integer, String> b2 =
ImmutableSortedMap.<Integer, String>naturalOrder();
Run Code Online (Sandbox Code Playgroud)

(注意,通用参数位于点后面,而不是之前)