反汇编Java代码

时间:2013-07-22 19:37:54

标签: java hadoop mapreduce

阅读Apache Crunch示例,该示例主要是Java并且对两者都是新手。 (我知道.NET) 所以这是示例代码:

DoFn<String, Pair<String, Long>> extractIPResponseSize = new DoFn<String, Pair<String, Long>>() {
  transient Pattern pattern;
  public void initialize() {
    pattern = Pattern.compile(logRegex);
  }
  public void process(String line, Emitter<Pair<String, Long>> emitter) {
    Matcher matcher = pattern.matcher(line);
    if(matcher.matches()) {
      try {
        Long responseSize = Long.parseLong(matcher.group(7));
        String remoteAddr = matcher.group(1);
        emitter.emit(Pair.of(remoteAddr, responseSize));
      } catch (NumberFormatException e) {
        // corrupt line, we should increment a counter
      }
    }
  }
};

第一行非常困惑我,我无法遵循它,你能一块一块地解释一下吗? 注意:DoFn是Apache Crunch中的一个类,这里​​是documentaiotn: http://crunch.apache.org/apidocs/0.3.0/org/apache/crunch/DoFn.html

我也做了一些谷歌搜索,看起来Pair也是Apache常见的Lang事情: http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/tuple/Pair.html

也许我需要了解Java泛型?

1 个答案:

答案 0 :(得分:1)

DoFn是一个通用类。也就是说,它的每个实例都包含类型参数。类型参数在方法中使用,但由具有Object引用的编译器替换。有关泛型的更多信息,请参阅Wikibooks

至于该行之后的左大括号,这是一个微妙的提醒,这实际上是一个被宣布的内部类。它是DoFn的匿名子类,它覆盖initializeprocess方法。有关内部类的更多信息,请再次参阅Wikibooks