2010-11-20 8 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()'だけでも「ジェネリックメソッドへの呼び出し」です(最後の例では、代入を行うときの型パラメータ)。私は 'ImmutableMap。 builder()'の特別な概念を見つけられませんでしたが、特定の名前を持つべきです。IMO :-) –

+0

Ah、ok。私の答えを更新しました... – aioobe

+1

ありがとうございます - かなり長い名前ですが、少なくとも私はそれを "タイプピリオドの角度パラメータカンマパラメータの角度methodname"として覚えておく必要はありません;-) –

3

あなたが話している構文が角カッコである場合、それらはTYPE PARAMETERSと呼ばれます。

+0

いいえ、これはあまりにも一般的です - 「型パラメータ」はすべての種類のジェネリック構文に適用されます。 'new HashMap ()'にも書かれていますが、 'X. method()'で構文の名前を探しています。期間。 –

+1

しかし、それは*彼ら*です。より具体的にするには、「ジェネリックメソッドの型パラメータ」となります。 – akf

関連する問題