java - Java中泛型这 block 怎么理解?

标签 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> .

最佳答案

为了知道哪种类型指的是什么,您需要查看 Mapper 本身的文档/实现,您可以找到 here .泛型在内部称为 K1V1K2V2,并在整个类(class)中用于各种场合。因此,无论什么时候将 K1 作为参数(或为此返回 K1),它指的是您“插入”的第一种类型。它 基本上(将继承和诸如此类的高级主题放在一边)只是一种简单的替换形式。

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

关于java - Java中泛型这 block 怎么理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23459315/

相关文章:

java - Java 中按外观对字符串排序

java - 使用枚举类型时如何避免带有 equals 的 if 语句?

java - 如何处理从 Java 到 Kotlin 的通用列表转换?

java - 如何避免 Kafka 的限制?

java - 将 java 对象转换为具有已知类型参数的泛型类型

java - 具有方法重载的通用类型的匿名类

swift - 协议(protocol)不符合从通用父类继承的类?

java - 如何为64位Linux机器编译Hadoop?

hadoop - 如何在 hive 中使用变量?

hadoop - HDInsight hadoop-mapreduce-examples.jar 输出在哪里?