枚举值实现Hadoop的可写接口

Art*_*rov 5 java enums hadoop

假设我有一个枚举:

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中通过线路发送枚举或者有解决方案?

JB *_*zet 0

我对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)