如何理解Java中的这个泛型?

时间:2014-05-04 17:32:15

标签: java generics hadoop mapreduce

这是Hadoop在线教程(https://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html)的示例代码

public class WordCount {
    public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {
    // Something here
    }
}

在方括号中,有<LongWritable, Text, Text, IntWritable>Text的两次出现让我感到困惑。

我们如何判断它在实际代码中引用了哪个Text,因为它们中有两个具有相同的名称?例如当我们使用private Text word = new Text();

同一篇文章中的类似代码是public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable>

1 个答案:

答案 0 :(得分:1)

为了知道您需要查看哪种类型,请查看Mapper本身的文档/实现,您可以找到here。泛型在内部称为K1V1K2V2,并且在不同场合在整个班级中使用。因此,每当某事件以K1作为参数(或者就此问题返回K1)时,它指的是您“插入”的第一种类型。基本上(把继承和高级主题放在一边)只是一种简单的替代形式。

顺便说一句:每个(好的)IDE都应该帮助你解决这些问题,并推断出你正在处理的正确类型。