2017-05-05 91 views
0

我正在學習hadoop map-reduce算法,我是java新泛型概念的新手,我能夠理解泛型能夠爲使用參考類型。但無法理解爲什麼同一參數類型被宣佈爲不止一次大括號內的<。Java泛型不止一次擁有相同類型的參數

下面是一個減速器類定義,它實現了減速器接口的類型聲明爲< Text,IntWritable,Text,IntWritable>。爲什麼不能如< Text,IntWritable> alone?

public static class T_Reduce extends MapReduceBase implements 
Reducer< Text, IntWritable, Text, IntWritable > 
{ 

    public void reduce(Text key, Iterator <IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException 
    { 
     ...... 
     ...... 
    } 
} 

我有谷歌它很多,找不到一個簡單的正確答案。

+0

簡而言之:那些是用於輸入鍵,輸入值,輸出鍵,輸出值類型的。輸入和輸出類型可以不同。因此,你需要4個參數。 – vefthym

回答

1

因爲減速機可以採取四種不同類型。根據你的情況,這不,但功能依然存在,編譯器會沒有想法是什麼。後兩類人的東西,如:

Reducer<Text, IntWritable, ?, ?> 
3

Reducer的JavaDoc的完全指定的簽名鍵入等

org.apache.hadoop.mapreduce 
    Class Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT> 

其指示前兩個參數是鍵和值類型輸入到減少功能 - 而第二對是輸出類型。在這裏它們是相同的,但它們並不一定要用於每個可能的用例。例如,您可能會從int的計算中生成double

1

您是否檢查了Reducer的聲明?我的猜測是它被宣佈爲Reducer<T,U,V,W>,所以你必須參數化所有類型,即使它們中的一些是相同的。

1

Reducer<Text, IntWritable, Text, IntWritable>Reducer<K2, V2, K3, V3>的專業化。該接口不要求K2K3是相同的類型。所以它不能重用鍵類型的參數。因此專業化也不能。