这是 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 .泛型在内部称为 K1
、V1
、K2
和 V2
,并在整个类(class)中用于各种场合。因此,无论什么时候将 K1
作为参数(或为此返回 K1
),它指的是您“插入”的第一种类型。它 基本上(将继承和诸如此类的高级主题放在一边)只是一种简单的替换形式。
顺便说一下:每个(好的)IDE 都应该帮助您解决这些问题并自动推断您正在处理的正确类型。
关于java - Java中泛型这 block 怎么理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23459315/