我正在学习hadoop map reduce算法,我对java泛型概念比较陌生,我能够理解泛型对于使用引用类型创建的对象可以做什么(类型转换)。但无法理解为什么同一参数类型在大括号内声明了多次。
下面是一个reducer类定义,它实现了reducer接口,类型声明为<text,intwritable,text,intwritable>。为什么不能单独作为<text,intwritable>?
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
{
......
......
}
}
我已经谷歌了很多,找不到一个简单的正确答案。
4条答案
按热度按时间rwqw0loc1#
Reducer<Text, IntWritable, Text, IntWritable>
是专业化的Reducer<K2, V2, K3, V3>
. 接口不需要K2
以及K3
是同一类型的。因此它不能对键类型重用参数。因此专业化 也不能。gg58donl2#
的javadoc
Reducer
完全指定如下类型的签名这表明前两个参数是reduce函数输入的键和值类型,而第二对是输出类型。在这里,它们是相同的,但并不要求它们适用于所有可能的用例。例如,您可能正在生成
double
从计算开始int
.qzlgjiam3#
因为减速器可以有四种不同的类型。在您的例子中,它没有,但是功能仍然存在,编译器不知道最后两种类型是什么,例如:
0x6upsns4#
你检查过申报表了吗
Reducer
? 我猜它被宣布为Reducer<T,U,V,W>
因此,必须参数化所有类型,即使其中一些类型相同。