假设我有一个枚举:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我想将它的实例作为其他类实例的一部分传递.
equals不起作用,因为它不会考虑枚举的内部变量,加上所有枚举实例在编译时都是固定的,不能在其他地方创建.
这是否意味着我无法在Hadoop中通过线路发送枚举或者有解决方案?
我对Hadoop一无所知,但是根据接口的文档,你可能可以这样做:
public void readFields(DataInput in) throws IOException {
// do nothing
}
public static SomeEnumType read(DataInput in) throws IOException {
int value = in.readInt();
if (value == 0) {
return SomeEnumType.A;
}
else if (value == 1) {
return SomeEnumType.B;
}
else {
throw new IOException("Invalid value " + value);
}
}
Run Code Online (Sandbox Code Playgroud)