java泛型多次持有相同类型的参数

xyhw6mcr  于 2021-05-29  发布在  Hadoop
关注(0)|答案(4)|浏览(366)

我正在学习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 
     { 
        ......
        ......
     } 
}

我已经谷歌了很多,找不到一个简单的正确答案。

rwqw0loc

rwqw0loc1#

Reducer<Text, IntWritable, Text, IntWritable> 是专业化的 Reducer<K2, V2, K3, V3> . 接口不需要 K2 以及 K3 是同一类型的。因此它不能对键类型重用参数。因此专业化​ 也不能。

gg58donl

gg58donl2#

的javadoc Reducer 完全指定如下类型的签名

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

这表明前两个参数是reduce函数输入的键和值类型,而第二对是输出类型。在这里,它们是相同的,但并不要求它们适用于所有可能的用例。例如,您可能正在生成 double 从计算开始 int .

qzlgjiam

qzlgjiam3#

因为减速器可以有四种不同的类型。在您的例子中,它没有,但是功能仍然存在,编译器不知道最后两种类型是什么,例如:

Reducer<Text, IntWritable, ?, ?>
0x6upsns

0x6upsns4#

你检查过申报表了吗 Reducer ? 我猜它被宣布为 Reducer<T,U,V,W> 因此,必须参数化所有类型,即使其中一些类型相同。

相关问题