如何在Apache Avro中定义Java常量字段?
实施例
public static final String FIELD = "field";
答案 0 :(得分:2)
简短的回答是:你不是。 Avro是一个序列化系统;因此,为了理解为什么静态字段没有被序列化,我们可以超越Avro,一般来说是序列化。以下是来自SO的一些资源。
为了证明Avro没有序列化静态字段,我们可以使用ReflectData
来生成架构。
import org.apache.avro.Schema;
import org.apache.avro.reflect.ReflectData;
public class Main {
public static void main(String... args) {
Schema schema = ReflectData.get().getSchema(Main.Foo.class);
System.out.println(schema);
}
static class Foo {
public static final String FIELD = "field";
}
}
输出为:{"type":"record","name":"Foo","namespace":"thepackage.Main$","fields":[]}
注意空数组的字段。
如果字段上没有static
修饰符,则架构变为:
{"type":"record","name":"Foo","namespace":"thepackage.Main$","fields":[{"name":"FIELD","type":"string"}]}
上面的链接解释了为什么序列化静态字段是不必要的和不合需要的,但我想你可以用单元素枚举实现相同的效果。