关于以下代码段,为什么方法read
的定义中有一个MyWritable
,而其他两个方法write
和readFields
没有?此外,为什么read
应该定义为静态?如何理解这种设计?
public class MyWritable implements Writable {
// Some data
private int counter;
private long timestamp;
public void write(DataOutput out) throws IOException {
out.writeInt(counter);
out.writeLong(timestamp);
}
public void readFields(DataInput in) throws IOException {
counter = in.readInt();
timestamp = in.readLong();
}
public static MyWritable read(DataInput in) throws IOException {
MyWritable w = new MyWritable();
w.readFields(in);
return w;
}
}
最佳答案
答案很简单。static
读取方法允许您在实际的类上调用该方法并返回一个实例。因此,与其做:
MyWritable writer = new MyWritable();
writer.readFields(input);
您可以这样做:
MyWritable writer = MyWritable.read(input);
并达到相同的效果。为了方便。
然后,它返回
MyWritable
,因为否则您将永远无法获得对象!第一个方法可以返回void
,因为您已经创建了对象实例,但是在后一个方法中,它必须返回为您创建的实例。