我有一个我想在 Hadoop 中使用的第三方类,因此需要让它实现Writable
。问题是 Hadoop 使用的方式Writable
是创建一个 object o = SomeObject()
,然后调用o.readFields(in)
反序列化,在我的情况下我无法创建空对象:
public abstract class Cube {
protected final int size;
protected Cube(int size) { this.size = size; }
}
注意size
是final
。
public class RealCube {
public Cube(int size) { super(size); }
}
这里RealCube
只有一个超级构造函数可以调用,并且该构造函数final
在抽象超类中设置变量。
public class RealCubeWritable implements Writable {
public void readFields(DataInput in) {
/* yikes! need to set the size */
}
}
当我们开始尝试实现RealCubeWritable
时,我无法拥有构造函数,并且在检查流之前RealCubeWritable()
我无法知道实际情况。size
DataInput
因此,在 Hadoop 中执行此操作的唯一方法似乎是使用包装器。我想知道是否有一种方法可以使用包装器,但RealCubeWritable
仍然表现得像RealCube
?我已经研究过使用动态代理类,但我不确定这是否可行(或如何实际执行)。
谢谢!