gpt4 book ai didi

java - 为什么将 Mapper 和 Reducer 类声明为静态的?

转载 作者:可可西里 更新时间:2023-11-01 14:15:46 24 4
gpt4 key购买 nike

这可能表明我缺乏对 Java 的理解,但我想知道为什么在大多数 MapReduce 程序中映射器和缩减器类被声明为静态的?

最佳答案

当将 mapper 和 reducer 类声明为另一个类的内部类时,必须将它们声明为静态的,以便它们不依赖于父类。

Hadoop 使用反射为每个运行的 map 或 reduce 任务创建类的实例。创建的新实例需要一个零参数构造函数(否则它怎么知道要传递什么)。

通过在不使用 static 关键字的情况下声明内部映射器或 reduce 类,java 编译实际上创建了一个构造函数,该构造函数期望在构造时传入父类的实例。

您应该能够通过对生成的类文件运行 javap 命令来看到这一点

此外,static 关键字在父类声明中使用时无效(这就是为什么您从未在顶层看到它,而只在子类中看到它的原因)

关于java - 为什么将 Mapper 和 Reducer 类声明为静态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11570674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com