我正在学习hadoop map-reduce算法,我是java泛型概念的新手,我能够理解泛型可以为使用引用类型创建的对象做什么(类型转换)。但无法理解为什么同一参数类型在<&lt;&gt;内多次声明 括号。
下面是一个reducer类定义,它实现了 Reducer 接口,类型声明为&lt; Text,IntWritable,Text,IntWritable&gt;。为什么它不能像&lt;文字,IntWritable&gt;一个人?
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 :(得分:3)
Reducer
的JavaDoc完全指定类型的签名,如
Reducer<Text, IntWritable, ?, ?>
这表示前两个参数是reduce函数输入的键和值类型 - 而第二个参数是输出类型。它们是相同的,但并不要求它们适用于所有可能的用例。例如,您可能会在org.apache.hadoop.mapreduce
Class Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
上的计算中生成double
。
答案 1 :(得分:1)
因为Reducer 可以采用四种不同的类型。在你的情况下,它没有,但功能仍然存在,编译器不知道最后两种类型是什么类似的东西:
<ion-content>
<ion-list [virtualScroll]="groupedContacts" approxItemHeight="50px">
<ion-item *virtualItem="#group">
<ion-item-divider class="header-letter">{{group.letter}}</ion-item-divider>
<ion-list [virtualScroll]="group.contacts" approxItemHeight="50px">
<ion-item *virtualItem="#contact">
<ion-col width-40>
<h4 text-wrap class="name-invite">{{contact.name}}</h4>
</ion-col>
<ion-col width-35>
<p>{{contact.number}}</p>
</ion-col>
<ion-col width-25>
<button class="inner-invite" (click)="invite(contact)">Invite</button>
</ion-col>
</ion-item>
</ion-list>
</ion-item>
</ion-list>
</ion-content>
答案 2 :(得分:1)
你检查了Reducer
的声明吗?我的猜测是它被声明为Reducer<T,U,V,W>
所以你必须参数化所有类型,即使它们中的一些是相同的。
答案 3 :(得分:1)
Reducer<Text, IntWritable, Text, IntWritable>
是Reducer<K2, V2, K3, V3>
的专精。该界面不要求K2
和K3
属于同一类型。因此它不能重用键类型的参数。因此,专业化也不能。