Avro 模式中的多态性和继承

2024-01-07

是否可以编写一个 Avro 模式/IDL 来生成一个扩展基类或实现接口的 Java 类? 生成的 Java 类似乎扩展了org.apache.avro.specific.SpecificRecordBase。因此,工具可能是一条出路。但是,我不知道这是否可能。

我见过一些示例,其中建议在每个特定模式中定义显式“类型”字段,其中更多的是关联而不是继承语义。

我在工厂类和代码的其他部分中大量使用我的基类,例如<T extends BaseObject>。目前,我从 JSON 模式生成了代码,它支持继承。

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

帮助表示感谢!谢谢。


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

我修改了record.vm模板也可以实现我的特定接口。有一种方法可以使用以下命令指定速度目录的位置templateDirectorymaven 构建插件中的配置。

我也改用SpecificDatumWriter代替reflectDatumWriter.

<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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Avro 模式中的多态性和继承 的相关文章

随机推荐

  • ViewPager 中区分用户滚动和程序化页面更改

    我有一个android support v4 view ViewPager在我的应用程序中 我想区分以编程方式启动的平滑滚动和用户启动的触摸滚动 我看过ViewPager OnPageChangeListener我相信答案可能就在那里 但我
  • 在 PHP 中上传图像时去除元数据

    我认识的某个网站最近将其带宽从每月 2 5 TB 升级到 3 5 TB 原因是他们最近超过了 2 5 限制 他们抱怨不知道如何降低带宽使用量 我没有看到他们考虑的一件事是 网站上显示的 JPEG 和其他图像 这是一个图像较多的网站 可以包含
  • 使用 python 的 optparse 时在帮助消息中显示换行符

    我正在使用 optparse 模块进行选项 参数解析 出于向后兼容性的原因 我无法使用 argparse 模块 如何格式化我的 Epilog 消息以便保留换行符 在下面的示例中 我希望按格式打印尾声 epi Examples usages
  • BorderColor 在 Android 上不选择 LinearGradient 颜色

    我试图创建一个圆圈 里面有一个图像 它的边框是彩色的 这就是我使用 LinearGradient 的原因 我正在使用这个指南 https codeburst io linear gradient for border color in re
  • 处理功能按键

    I have a C form with 5 buttons The users enters the information and depending on the press of a function key a specific
  • 数组内的自增运算符

    我有一个 C 程序 它使用数组执行队列操作 在该程序中 他们增加了数组内的变量 我不明白这是如何运作的 那么 请解释一下这些操作 array i array i 请解释一下这些操作 array i 第一次增量i 然后为您提供递增索引处的元素
  • C#:: 何时使用事件或从事件处理接口派生的对象集合?

    我有一个我认为是一个简单的 问题 我已经找到了几个解决方案 但我不确定该走哪条路以及 C 中的最佳实践 我有一个主对象 比如单例 在应用程序的生命周期内实例化一次 这个 MasterClass 创建了一堆新类型的对象 每次调用 Master
  • 创建带有前导零的数字序列[重复]

    这个问题在这里已经有答案了 这个问题之前已经使用 Console writelines 函数解决过 但这在我的 R 版本中不可用 而且我找不到它属于哪个包 我只是想以 xxx 格式创建一个从 0 99 到前导零的数字序列 所以我的数字应该是
  • 如何将 MongoDB 对象提取到 pandas Dataframe?

    我想从 MongoDB 集合中仅提取一个我需要的对象 有一个关于 manuelActivityInfo 对象的示例 x list coll find activities manuelActivityInfo exists True act
  • maxRequestPathLength 不在 ASP.NET 4 文档中并且不起作用

    如果我尝试在 ASP NET 应用程序中使用新的 maxRequestPathLength 设置 它将不起作用 我收到无法识别的属性错误 我尝试过在 IIS 7 中使用 ASP NET Integrated 和 Classic 应用程序池
  • 服务器端的客户端证书验证,DEPTH_ZERO_SELF_SIGNED_CERT 错误

    我正在使用节点 0 10 26 并尝试通过客户端验证建立 https 连接 服务器的代码 var https require https var fs require fs process env NODE TLS REJECT UNAUT
  • R闪亮:彩色文件输入按钮和进度条

    有没有办法上色fileInputR 中的按钮闪亮吗 看起来这是可能的 如此处所示page https github com rstudio shiny pull 602在 github 上 但是我找不到完成此操作的代码 这是一个简单的应用程
  • 尝试在新解决方案中启用 NuGet Package Restore 时出错

    尝试在我刚刚创建的新解决方案中启用包还原时出现错误 VS2012中的错误是 NuGet 包管理器 配置解决方案以还原 NuGet 时出错 构建中的包 无法从路径 NuGet Build 2 7 0 npkg 读取包 我尝试在 VS2010
  • 从日期/时间字符串获取时间

    我有一个日期值存储在变量中 我需要将值的时间部分提取到一个单独的变量中 然后从中添加 减去时间 日期变量使用 date YmdHis 设置 例如 20110805124000 表示 2011 年 8 月 5 日 12 40 00 从值 20
  • PInvoke - 从指针编组结构数组

    我正在尝试遵循以下答案这个问题 https stackoverflow com a 2403083 27494 我的结构在 C 中看起来像这样 typedef struct drive info t unsigned char drive
  • 将 Apache Cordova/PhoneGap 与 Android 2.x 结合使用

    似乎不可能为 Android 2 x 创建 PhoneGap 应用程序 是对的吗 要使用phonegap运行Android应用程序 请将您的应用程序构建为Android 4 0 3 并将最低版本设置为您想要的较低版本 基本上 Android
  • cPanel cron 作业,未指定输入文件?

    我刚刚设置了我的第一个 cron jon 来每晚运行一个股票脚本 手动运行它效果很好 它存储在 admin stock update php中 我正在运行的命令是 usr bin php q admin stock update php 但
  • 如何对类的单个枚举进行 Javadoc

    我正在为一个包含自己的枚举的类编写 Javadoc 有没有办法为各个枚举生成 Javadoc 例如 现在我有这样的事情 This documents HairColor private static enum HairColor BLACK
  • 从方法返回泛型类型的实例

    我想要一个方法getInstance它接受一个字符串值并返回一个对象实例 在方法签名中定义为泛型 def getInstance T dataStr String Option T T match case typeOf String gt
  • Avro 模式中的多态性和继承

    是否可以编写一个 Avro 模式 IDL 来生成一个扩展基类或实现接口的 Java 类 生成的 Java 类似乎扩展了org apache avro specific SpecificRecordBase 因此 工具可能是一条出路 但是 我