2010-11-20 68 views
4

有時需要這種(相對奇怪的)語法來避免類型不匹配。但是那個語法的名字實際上是什麼?從Google Guava(R07)什麼是泛型語法的名稱:「X. <String,String> method()」

用例:

ImmutableMap限定

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

它可以這樣使用的方法:

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

其通過的方式內嵌版本的:

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

回答

6

我不認爲該語法有一個特定的名稱。我回顧了JLS,它只是提到它是「對通用方法的調用」。

在你的情況下,人們可以縮小到「調用非靜態泛型方法」。

如果您指的是類型參數存在於呼叫端的事實,那麼您只需說出「使用顯式類型參數」調用通用方法

爲了給出決定一個方法是否適用意願,在通用方法的情況下的示例,其中它是(排序的)在JLS

提及(§8.4.4),需要實際類型參數被確定。實際類型參數可以顯式或隱式傳遞。如果它們隱式傳遞,則必須根據參數表達式的類型推斷它們(第15.12.2.7節)。

+0

ImmutableMap.builder()'也是「對一個通用方法的調用」(我的最後一個例子表明它仍然允許推斷進行分配時的類型參數)。我沒有爲'ImmutableMap。 builder()'找到一個特殊的概念,但它*應該*有一個特定的名字IMO :-) – 2010-11-20 15:25:23

+0

啊,好的。更新我的答案... – aioobe 2010-11-20 15:29:39

+1

感謝 - 相當長的名字,但至少我不必記住它爲「type period angle parameter comma parameter angle methodname」anmore ;-) – 2010-11-20 15:32:07

3

如果您正在討論的語法是尖括號,那麼它們被稱爲TYPE PARAMETERS。

+0

不,這太籠統 - 「類型參數」適用於所有種類的泛型語法,例如,也可以添加到'new HashMap ()' - 但我正在專門查找'X. method()'中的語法名稱,尖括號(類型參數)時期。 – 2010-11-20 15:22:43

+1

但是,這是他們* *。如果你想要更具體一些,他們將是'通用方法類型參數' – akf 2010-11-20 15:27:22

相關問題