以下是java代码中的类定义:
public class WordCount {
public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
context.write(word, one);
}
}
}
那是什么意思?
public static class Map extends Mapper<LongWritable, Text, Text, IntWritable>
为什么我们需要“&lt;&gt;”这里吗?
答案 0 :(得分:2)
这被称为“泛型”。它允许您添加类型参数。
在这种特殊情况下,对于(LongWritable,Text,Text,IntWritable)的元组,它意味着Map
是Mapper
。
一个更简单的例子:假设你有一个Set。它可以是MyClass实例的一组整数,一组字符串....这是您使用泛型的地方。
通过声明变量的类型为Set<Integer>
,您可以指定它是一组整数。如果您只是将其声明为Set,则必须检查它是否仅包含整数。通过添加类型参数<Integer>
,编译器现在可以进行类型检查。
泛型在Java语言规范中定义为here。
答案 1 :(得分:0)
查看Mapper
课程的声明。它可能类似于class Mapper<E, T, T, K>
,它声明了3种不同的泛型类型。