代码之家  ›  专栏  ›  技术社区  ›  Shravan Ramamurthy

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

  •  0
  • Shravan Ramamurthy  · 技术社区  · 6 年前

    当我在crunch中使用自定义枚举时 parallelDo ( Avros.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)
    

    一旦我将枚举更改为类,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 回复  |  直到 6 年前
    推荐文章