0

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>

ここで「<>」が必要なのはなぜですか?

4

2 に答える 2

2

これは「ジェネリック」と呼ばれます。タイプパラメータを追加できます。

この特定のケースでは、それは(LongWritable、Text、Text、IntWritable)のタプル用でMapあることを意味します。Mapper

より簡単な例:セットがあるとします。これは、MyClassインスタンスの整数のセット、文字列のセットである可能性があります。これは、ジェネリックスを使用する場所です。
変数が型Set<Integer>であることを宣言することにより、それが整数のセットであることを指定します。セットとして宣言するだけの場合は、整数のみが含まれていることを自分で確認する必要があります。型パラメーターを追加することにより<Integer>、コンパイラーは型チェックを実行できるようになります。

ジェネリックスは、ここJava言語仕様で定義されています。

于 2012-09-17T07:31:15.423 に答える
0

Mapperクラスの宣言を見てください。3 つの異なるジェネリック型class Mapper<E, T, T, K>を宣言するようなものである可能性があります。

于 2012-09-17T07:33:04.620 に答える