Пустой список в Хранилище данных Механизма Приложения: Java по сравнению с Python

У меня есть следующий класс модели Java в Механизме Приложения:

public class Xyz ... {
    @Persistent
    private Set<Long> uvw;
}

При сохранении объектного Xyz с пустым множеством uvw в Java, я получаю "пустое" поле (как перечислено в appengine средстве просмотра хранилища данных). Когда я пытаюсь загрузить тот же объект в Python (через remote_api), как определено следующим классом модели Python:

class Xyz(db.Model):
    uvw = db.ListProperty(int)

Я получаю "BadValueError: Свойство uvw требуется".

При сохранении другого объекта того же класса в Python с пустым списком uvw средство просмотра Хранилища данных печатает "недостающее" поле.

По-видимому пустая обработка устройства хранения данных списков отличается между Java и Python и выводом к "несовместимым" объектам.

Таким образом мой вопрос: Есть ли путь к, также:

  • Java силы для хранения пустого списка как "недостающего" поля,
  • вынудите Python корректно принять "пустой" список как пустой список при загрузке объекта?

Или любое другое предложение о том, как обработать пустое поле списка на обоих языках.

Спасибо за Ваши ответы!

11
задан Denis T. 14 October 2019 в 09:45
поделиться

1 ответ

Поведение Java Set обусловлено тем, что Коллекции Java являются ссылочными типами, которые по умолчанию имеют значение NULL.

Чтобы фактически создать пустой Set, объявите его следующим образом:

@Persistent
private Set<Long> uvw = new HashSet<Long>();

или используйте другую реализацию Set с правой стороны. HashSet - наиболее часто используемый тип Set. Другими интересными типами наборов являются два потокобезопасных набора CopyOnWriteArraySet и ConcurrentSkipListSet ; также тип упорядоченного набора LinkedHashSet и тип сортированного набора TreeSet .

0
ответ дан 3 December 2019 в 12:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: