【问题标题】:Why is my Avro code generated as an Interface, instead of a Class?为什么我的 Avro 代码生成为接口而不是类?
【发布时间】:2021-12-03 03:48:33
【问题描述】:

我无法在我的 Avro 生成的类上调用 newBuilder() 方法。

      return (data -> {
        return Flux.fromIterable(data)
            .map(sampleRecord -> SampleRecord.newBuilder() // FAIL - avro supplied newBuilder() method not found
                .setId(1)
                .setDescription("desc")
                .setValue(42)
                .build())
            .collectList();
      });

当我查看实际生成的代码时,我可以看到生成的类实际上被定义为一个接口(!!),而不是一个定义 newBuilder() 的类。

我确定我的 .avdl 代码有效!

@namespace("com.example")
protocol SampleRecord {

    record SampleRecord {
        string id;
        string description;
        string value;
    }
}

为什么它会生成一个 SampleRecord 接口,而不是一个类?!

【问题讨论】:

    标签: java avro


    【解决方案1】:

    协议和记录名称(可能的类的名称)相同。这(出于某种原因)向 *.avdl 解析器表明该记录应作为接口输出。重命名协议,使其唯一。然后,记录将生成为一个类。

    @namespace("com.example")
    protocol SampleRecordProtocol {
    
        record SampleRecord {
            string id;
            string description;
            string value;
        }
    }
    

    请注意协议和记录名称不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多