2010-11-20 4 views
4

형식 불일치를 피하기 위해 때때로 (비교적 이상하게 보이는) 구문이 필요합니다. 그러나 실제로 구문의 이름은 무엇입니까?제네릭 구문의 이름은 무엇입니까? "X. <String, String> method()"

ImmutableMap<String, String> map = 
     ImmutableMap.<String, String>builder().put("a", "A").build(); 

방법 인라인 버전으로이다

ImmutableMap 그것이 같이 사용될 수

public static <K, V> Builder<K, V> builder() 

방법을 정의

사용 예 Google Guava (R07)로부터 :

Builder<String, String> builder = ImmutableMap.builder();  
ImmutableMap<String, String> map = builder.put("a", "A").build(); 

답변

6

구문에 특정 이름이 있다고 생각하지 않습니다. 나는 JLS를 리뷰했고 단지 "일반 메소드"에 대한 호출이라고 언급했다.

경우에 따라 "정적이 아닌 일반 메서드 호출"로 범위를 좁힐 수 있습니다.

형식 매개 변수가 호출 측에 존재한다는 사실을 언급하는 경우 "명시 적 형식 매개 변수을 사용하는 일반 메서드 에 대한 호출"이라고 말하면됩니다.

은 (§8.4.4) 실제 것을 요구하는 방법을 적용 할 뜻은 일반적인 방법의 경우인지 결정 JLS

언급이 경우의 예를 (종류)을 수득 유형 인수가 결정됩니다. 실제 형식 인수는 명시 적으로 또는 암시 적으로 전달 될 수 있습니다. 그것들이 암묵적으로 전달되면, 그것들은 인수 표현식의 유형으로부터 유추되어야한다 (15.12.2.7).

+0

'ImmutableMap.builder()'만이 "generic method에 대한 호출"이기도하다. (그리고 나의 마지막 예제에서도 여전히 그것을 추론 할 수있다. 할당을 할 때의 타입 파라미터). 'ImmutableMap. builder()'에 대한 특별한 개념을 찾지 못했지만 IMO라는 특정 이름을 가져야합니다 :-) –

+0

아, 그래. 내 대답을 업데이 트 ... – aioobe

+1

고마워 - 꽤 긴 이름,하지만 적어도 "형식 기간 각도 매개 변수 쉼표 매개 변수 각도 methodname"로 기억하지 않아도 더 이상 ;-) –

3

당신이 말하는 구문이 꺾쇠 괄호이면 TYPE PARAMETERS라고 부릅니다.

+0

아니요, 너무 일반적입니다. "유형 매개 변수"는 모든 종류의 제네릭 구문에 적용됩니다. 또한'new HashMap ()'으로 변경했습니다 - 그러나 꺽쇠 괄호 (타입 매개 변수)가 바로 뒤에 오는'X. method()'의 구문 이름을 특별히 찾고 있습니다 기간. –

+1

하지만 그게 그들이 *있는 이유입니다. 좀 더 구체적으로 다루기를 원한다면 'generic method type parameters'가 될 것이다. – akf

관련 문제