假设我有一个枚举:
public enum SomeEnumType implements Writable {
A(0), B(1);
private int value;
private SomeEnumType(int value) {
this.value = value;
}
@Override
public void write(final DataOutput dataOutput) throws IOException {
dataOutput.writeInt(this.value);
}
@Override
public void readFields(final DataInput dataInput) throws IOException {
this.value = dataInput.readInt();
}
}
我想把它的一个示例作为其他类示例的一部分来传递。
equals不起作用,因为它不会考虑枚举的内部变量,而且所有枚举示例在编译时都是固定的,不能在其他地方创建。
这是否意味着我不能在hadoop中通过网络发送枚举,或者有解决方案?
3条答案
按热度按时间jhiyze9q1#
对于hadoop中的枚举,我通常和首选的解决方案是通过它们的序数值序列化枚举。
显然它有缺点:序数可以改变,所以如果你交换
ENUM_2
与ENUM_3
并读取先前序列化的文件,这将返回另一个错误的枚举。因此,如果您事先知道enum类,则可以编写enum的名称并按如下方式使用:
这将稍微占用更多的空间,但更便于保存对枚举名称的更改。
完整示例如下所示:
cx6n0qe32#
我对hadoop一无所知,但根据接口文档,您可能可以这样做:
szqfcxe23#
writableutils提供了方便的方法,使之更容易实现。