本文介绍了Google Guava:如何使用ImmutableSortedMap.naturalOrder?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm using Google Guava r08 and JDK 1.6.0_23.

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

I want to create an ImmutableSortedMap using a builder. I know I can create the builder like this:

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

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

and then use that to build maps, for example:

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

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

I noticed that class ImmutableSortedMap has a method naturalOrder() that returns a Builder with natural ordering. However, when I try to call this method, I get strange errors. For example, this gives a strange "; expected" error:

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

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

What is the correct syntax to call the naturalOrder() method?

该方法的API文档中提到了一些编译器错误.与此方法不起作用有关吗?

The API documentation of the method mentions some compiler bug. Does that have anything to do with this method not working?

修改

MForster的回答很好.但是当放弃泛型时,我不能一口气"做到这一点:

MForster's answer is good. But when leaving off the generics, I can't do it "in one go":

// 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();

推荐答案

正确的语法是

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

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

And you can drop the generics altogether, because they are inferred in this case:

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

这篇关于Google Guava:如何使用ImmutableSortedMap.naturalOrder?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-16 06:11