Массив Avro по умолчанию равен нулю, а не пустому массиву

#java #avro

Вопрос:

У меня есть следующее в моей схеме Avro (user.avsc):

 {  "name": "properties",  "type": {  "type": "array",  "items": "long"  },  "default": [] }  

Я ожидал бы , что массив по умолчанию будет пустым массивом [] , но когда я запускаю свои тесты, по умолчанию null он равен . Я использую сгенерированный Builder.build() для создания экземпляра моего User класса без установки этого поля (поэтому он будет использовать значение по умолчанию). Почему бы этому не быть по умолчанию [] ?

Ответ №1:

Значения по умолчанию предназначены для десериализации, когда поле не существует, а не для сериализации

Как написано в спецификации

default : Значение по умолчанию для этого поля, используемое только при чтении экземпляров, в которых отсутствует поле для целей эволюции схемы. Наличие значения по умолчанию не делает поле необязательным во время кодирования