我使用Google Guava r08和JDK 1.6.0_23。Google Guava:如何使用ImmutableSortedMap.naturalOrder?
我想使用構建器創建一個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文檔提到了一些編譯器錯誤。這有什麼關係,這種方法無法正常工作?
編輯
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();
是的,如果你建立在一系列鏈式調用的全地圖,你必須放置`ImmutableSortedMap。 naturalOrder()`。 Java無法推斷`naturalOrder()`調用的類型參數,因爲它返回的`Builder`不會被分配給任何東西。 –
ColinD
2011-02-05 15:14:54