【问题标题】:Disassembling a Java code反汇编 Java 代码
【发布时间】:2013-07-21 16:23:49
【问题描述】:

阅读 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 中的一个类,这里​​是它的文档: 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 泛型?

【问题讨论】:

  • 你需要了解泛型。

标签: java hadoop mapreduce


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-12-21
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 2012-05-06
    • 2018-03-21
    • 2012-12-14
    • 2017-08-18
    相关资源
    最近更新 更多