我正在查看“WordCount”,Hadoop 的 hello world 示例,它包含以下方法:
public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
context.write(key, new IntWritable(sum));
}
}
我一定是误解了我正在阅读的内容。我将其视为一个名为“Reduce”的泛型类,它使用一些泛型类型扩展了基类“Reducer”。来自 C# 的签名是不允许的,因为有两个 Text 实例,编译器不知道如何正确映射参数。
有人可以解释一下这个不熟悉的语法吗?
编辑: 这是泛型的一个示例,但是,在这种形式中,要使用的实际类型已在声明中设置。类Reduce不是泛型的,但Reducer是泛型的,并且我们设置了参数A、B、C和D。
最佳答案
Reducer
显然输入为 <A, B, C, D>
。仅仅因为 A 和 C 碰巧由相同类型提供并不意味着不可能(据我所知,应该在 C# 中工作)。
编辑:澄清一下——您可以拥有一个具有多个相同类型参数的方法:public void foo(String a, String b)
。人们不会说这是模棱两可的。泛型类型是类的参数,可以以类似的方式使用。想一个Map<String, String>
-- 您可能有一个字符串代表一个 ID,该 ID 指向另一个字符串作为用户名。
关于java - 这是java泛型吗?这怎么可能工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13714500/