【发布时间】:2020-08-11 11:55:02
【问题描述】:
这是我要转换为 Avro Schema 的 Java 枚举:
public enum ApplicationCode {
APP_A("MY-APP-A"),
APP_B("MY-APP-B");
private final String code;
ApplicationCode(String code) {
this.code = code;
}
public String getCode() {
return code;
}
}
由于枚举在 Avro 中通常可用作类型,因此我提出了以下建议:
{
"type" : "enum",
"name" : "ApplicationCode",
"namespace" : "com.example",
"symbols" : [ "APP_A", "APP_B" ]
}
并像这样在我的主要 Avro 中引用它:
"fields": [
{
"name": "masterApplicationCode",
"type": "ApplicationCode"
},
它就是这样工作的,但不幸的是,我使用这种方法丢失了应用程序代码(例如“MY-APP-A”)。我正在寻找一些东西,它允许我同时包含代码和标签。类似的东西
{
"type" : "enum",
"name" : "ApplicationCode",
"namespace" : "com.example",
"symbols" : [ "APP_A("MY-APP-A")", "APP_B("MY-APP-B")" ]
}
是否有可能拥有这种复杂的枚举,或者是否有任何解决方法来实现这一点?
【问题讨论】:
-
您是否尝试过覆盖枚举中的 toString 方法?类似于 super.toString() + "('" + code + "')"
-
如何覆盖 Avro 文件中的 toString() 方法? @SKumar
标签: java apache-kafka enums avro