使用枚举,错误:org.apache.crunch.CrunchRuntimeException:java.lang.NoSuchMethodException:

时间:2018-10-31 15:58:43

标签: java bigdata avro apache-crunch

当我在紧缩parallelDoAvros.reflects(TestEnumType.class))映射函数中使用自定义枚举时,出现以下错误。

Error: org.apache.crunch.CrunchRuntimeException: java.lang.NoSuchMethodException:EntityChangeType.<init>() at org.apache.crunch.types.avro.AvroDeepCopier$AvroReflectDeepCopier.createNewInstance(AvroDeepCopier.java:157)

将枚举更改为class后,Avro序列化工作正常。在枚举和类中,我都没有参数构造函数,并且该类被声明为静态的。 如何使用Avros.reflects方法序列化枚举?

无效的枚举:

public static enum EntityChangeType {
    Field1,
    Field2,
    Field3;
   EntityChangeType() {}
}

在类中代表相同的枚举后,它会起作用:

 public static class EntityChangeType {
    private final String entityChangeStatus;
    public EntityChangeType() {
      this(new String("Field1"));
    }

    public EntityChangeType(String entityChangeStatus) {
     this.entityChangeStatus = entityChangeStatus;
     }

    public String toString() {
      return this.entityChangeStatus;
    }

    public static final EntityChangeType FIELD1 = new EntityChangeType("Field1");
    public static final EntityChangeType FIELD2 = new EntityChangeType("Field2");
    public static final EntityChangeType FIELD3 = new EntityChangeType("Field3");
}

0 个答案:

没有答案