Лучшая практика для обработки целых чисел, допускающих значение NULL, в приложении удаленного взаимодействия Java - Flex?

У меня есть приложение, состоящее из части сервера Java и клиента Flash / Flex, оба взаимодействуют через BlazeDS. Чтобы иметь одинаковые типизированные объекты на обоих сайтах, я использую генератор кода GAS3 (используемый flex-mojos).

Но теперь я столкнулся с проблемой обработки целых чисел, допускающих значение NULL. Проблема в том, что у меня есть объект (A), который содержит идентификатор внешнего ключа, который ссылается на необязательный объект B. - Но я отправляю идентификатор только гибкому клиенту.

На сайте Java легко:

class A {
  private Integer bFk;
  getter/setter
}

Но на стороне гибкого клиента bFk имеет тип int. И Flash int не может быть нулевым. Таким образом, механизм удаленного взаимодействия преобразует Java null Integer в 0. После отправки его обратно на сервер Java bFk становится 0 даже на стороне Java. - Это неприемлемо, потому что мне нужно разделить 0 и ноль.

Мой первый рабочий процесс использует не Integer на стороне Java, а новый класс NullAbleID, который работает немного как оболочка / адаптер, который обертывает внутренний int, где -1 представляет собой null (я могу использовать -1 для null, потому что реальный id будет отрицательным). Но когда я использую это, это означает, что мне нужно заменить все идентификаторы Java Integer этим классом NullAbleID.

Поскольку я считаю, что я не первый, у кого есть эта проблема, я прошу вас лучше решить общий вопрос: как представить целое число, допускающее значение NULL, в сценарии удаленного взаимодействия Java - Flex?

(Мне известен вопрос: flex-null-integer, но даже если это та же проблема, вопрос о другом предмете.)


person Ralph    schedule 10.02.2011    source источник


Ответы (1)


Одна из идей - использовать значение флага. Что-то вроде -1 или NaN.

Обратите внимание на эту ошибку: https://bugs.adobe.com/jira/browse/BLZ-74 - как видите, это считается языковым ограничением и не будет исправлено путем присвоения NaN (как некоторые предлагают).

Если вы хотите самостоятельно использовать подход NaN, загляните в блог Farata по адресу http://flexblog.faratasystems.com/2010/01/07/how-to-keep-numeric-null-value-from-превращениевнуливпламени. Они говорят о преобразовании AS-> Java, но, просмотрев комментарии, вы найдете решение для Java-> AS.

Я бы не стал изменять все целые числа с помощью класса-оболочки, мне не нравится этот подход, но это тоже решение.

person Cornel Creanga    schedule 11.02.2011
comment
Спасибо, но NaN не работает, потому что вы не можете назначить NaN для Java Integer. И изменение Blaze Source (ссылка на блог) тоже не является для меня мнением. Но в любом случае спасибо, может это сработает для кого-то еще. - person Ralph; 11.02.2011