在阅读Hadoop, the definitive guide
的书时,我发现了以下段落。在我看来,标有黄色的代码段是标记为绿色的方案的示例。
我不清楚为什么我们必须super(Text.class);
,以及代码的哪一部分显示我们“静态设置类型”,标记为红色。
答案 0 :(得分:0)
如果你检查ArrayWritable(超类);它有下面的构造函数,这就是我们必须使用super
设置类型的原因ArrayWritable(Class valueClass)
静态意味着我们已经完成了这个编译时间(编译器必须在编译时而不是在运行时知道这一点)
答案 1 :(得分:0)
问题,以及Hadoop最糟糕的事情之一是所有(输入和输出格式,键,值,映射器,缩减器,组合器,分区器,比较器......)使用反射构造,假设提供的类具有0-arg构造函数。这意味着你不能只使用ArrayWritable作为键或值的类,因为没有0-arg构造函数,Hadoop可以使用它来实例化该类型的键或值。通过创建像TextArrayWritable这样的普通子类,使用0-arg构造函数,可以解决这个恼人的限制。这是一个有点奇怪的“静态”使用;构造函数仍然在运行时设置元素类型,即使它是常量。