Java泛型持有不止一次的相同类型的参数

时间:2017-05-05 01:25:33

标签: java hadoop generics mapreduce

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

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

4 个答案:

答案 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>的专精。该界面不要求K2K3属于同一类型。因此它不能重用键类型的参数。因此,专业化也不能。