Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多次持有相同类型参数的Java泛型_Java_Hadoop_Generics_Mapreduce - Fatal编程技术网

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

多次持有相同类型参数的Java泛型,java,hadoop,generics,mapreduce,Java,Hadoop,Generics,Mapreduce,我正在学习hadoop map reduce算法,我不熟悉java泛型概念,我能够理解泛型可以为使用引用类型创建的对象做什么(类型转换)。但无法理解为什么在大括号内多次声明同一参数类型 下面是一个reducer类定义,它实现了reducer接口,类型声明为。为什么不能单独使用 public static class T_Reduce extends MapReduceBase implements Reducer< Text, IntWritable, Text, IntWritable

我正在学习hadoop map reduce算法,我不熟悉java泛型概念,我能够理解泛型可以为使用引用类型创建的对象做什么(类型转换)。但无法理解为什么在大括号内多次声明同一参数类型

下面是一个reducer类定义,它实现了reducer接口,类型声明为。为什么不能单独使用

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 
     { 
        ......
        ......
     } 
} 
公共静态类T_Reduce扩展了MapReduceBase实现
Reducer
{  
公共void reduce(文本键、迭代器值、OutputCollector输出、Reporter报告器)引发IOException
{ 
......
......
} 
} 
我在谷歌上搜索了很多,但找不到一个简单正确的答案

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

Reducer<Text, IntWritable, ?, ?>
减速器
因为减速器可以有四种不同的类型。在您的情况下,它没有,但功能仍然存在,编译器不知道最后两种类型是什么,例如:

Reducer<Text, IntWritable, ?, ?>
减速器
的JavaDoc完全指定了以下类型的签名

org.apache.hadoop.mapreduce
级减速机
这表明前两个参数是reduce函数输入的键和值类型,而第二对是输出类型。在这里,它们是相同的,但并不要求它们适用于所有可能的用例。例如,您可能正在通过对
int
的计算生成一个
double
,JavaDoc For完全指定以下类型的签名

org.apache.hadoop.mapreduce
级减速机

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

上的计算生成一个
double
,您是否检查了
Reducer
的声明?我猜它被声明为
Reducer
,因此您必须参数化所有类型,即使其中一些类型相同。

您是否检查了
Reducer
的声明?我猜它被声明为
Reducer
,因此您必须参数化所有类型,即使其中一些类型相同。

Reducer
Reducer
的一个特化。接口不要求
K2
K3
为同一类型。因此,它不能重用密钥类型的参数。因此专业化​ 也不能。减速机是减速机的一个特化。接口不要求
K2
K3
为同一类型。因此,它不能重用密钥类型的参数。因此专业化​ 也不能。

简短回答:这些用于输入键、输入值、输出键、输出值类型。输入和输出类型可以不同。因此,您需要4个参数。简短回答:这些参数用于输入键、输入值、输出键和输出值类型。输入和输出类型可以不同。因此,您需要4个参数。