java - 这是java泛型吗?这怎么可能工作?

标签 java generics

我正在查看“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/

相关文章:

c# - 如何在 C# 中获取开放式泛型的类型参数数量

C#:合并相邻范围

java - 如何从 Java Android ping 外部 IP

java - 通过jhipster向实体添加字段

java - setContentView 不为按钮附加点击事件

java - 理解spring JDBCTemplate代码示例

Java:可以列出实现更多接口(interface)的类

java - 如何重用泛型类而不收到编译器警告

C# 将 Foo<Bar> 转换为 Foo<object>

java - 通用数组构造函数