首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Avro模式中的多态性和继承

Avro模式中的多态性和继承
EN

Stack Overflow用户
提问于 2014-01-01 08:14:35
回答 5查看 15.7K关注 0票数 30

有没有可能编写一个Avro schema/IDL来生成一个扩展基类或实现接口的Java类?看起来生成的Java类扩展了org.apache.avro.specific.SpecificRecordBase。因此,工具可能是要走的路。但是,我不知道这是否可能。

我见过一些例子,建议在每个特定的模式中定义一个显式的"type“字段,这种关联比继承语义更具关联性。

我在工厂类和带有<T extends BaseObject>等泛型的代码的其他部分中大量使用基类。目前,我让它从支持继承的JSON Schema中生成代码。

另一个附带问题:您是否可以使用IDL来定义没有协议定义的记录?我认为答案是否定的,因为编译器会抱怨缺少协议关键字。

感谢您的帮助!谢谢。

EN

Stack Overflow用户

回答已采纳

发布于 2014-01-10 11:27:21

我找到了一个更好的方法来解决这个问题。查看Avro中的Schema生成源,我发现在内部类生成逻辑使用Velocity模式来生成类。

我修改了record.vm模板以实现我的特定接口。有一种方法可以使用maven构建插件中的templateDirectory配置来指定velocity目录的位置。

我也改用SpecificDatumWriter而不是reflectDatumWriter

代码语言:javascript
复制
<plugin>
  <groupId>org.apache.avro</groupId>
  <artifactId>avro-maven-plugin</artifactId>
   <version>${avro.version}</version>
   <executions>
    <execution>
      <phase>generate-sources</phase>
      <goals>
        <goal>schema</goal>
      </goals>
      <configuration>
         <sourceDirectory>${basedir}/src/main/resources/avro/schema</sourceDirectory>
         <outputDirectory>${basedir}/target/java-gen</outputDirectory>
         <fieldVisibility>private</fieldVisibility>
         <stringType>String</stringType>
         <templateDirectory>${basedir}/src/main/resources/avro/velocity-templates/</templateDirectory>
       </configuration>
    </execution>
  </executions>
</plugin>
票数 20
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20864470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档