2011-02-05 3 views
3

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 자연과 함께 Builder를 반환하는 방법 naturalOrder()을 가지고 것으로 나타났습니다

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

주문. 그러나이 메서드를 호출하려고하면 이상한 오류가 발생합니다. 예를 들어,이 이상한 준다 "예상"오류 :

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

예, 당신이해야합니까 (일반 매개 변수가되지 전에, 점 뒤에 있습니다) 'ImmutableSortedMap. naturalOrder()'를 넣는다. Java는'naturalOrder()'호출의 타입 인자를 추론 할 수 없습니다. 반환되는'Builder '는 아무 것도 할당되지 않기 때문입니다. – ColinD

답변

10

올바른 구문은

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

그리고 당신을 이 경우 추측되기 때문에 제네릭을 모두 삭제할 수 있습니다.

+0

아, 그게 간단합니다! 감사. – Jesper

+3

"ImmutableSortedMap. naturalOrder()"구문에 대한 추가 정보 : http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ402 (명시 적 형식 인수 사양) –

5

올바른 구문은 다음과 같습니다

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

당신이 체인으로 연결된 통화 중 하나 시리즈의 전체지도를 구축 할 경우