【发布时间】:2012-03-29 01:26:08
【问题描述】:
我有一个试图在 Hadoop 中使用的第三方类,因此需要让它实现 Writable。问题是Hadoop使用Writable的方式是先创建一个对象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() 构造函数,并且在检查DataInput 流之前我无法知道实际的size。
因此,在 Hadoop 中执行此操作的唯一方法似乎是使用包装器。我想知道是否有办法使用包装器,但 RealCubeWritable 的行为仍然像 RealCube?我已经研究过使用动态代理类,但我不确定这是否可行(或如何实际使用)。
谢谢!
【问题讨论】:
标签: java serialization hadoop proxy-classes writable