Наилучшая практика обработки недействительного целого числа в приложении удаленного взаимодействия Java - Flex?
У меня есть приложение, состоящее из части сервера Java и клиента Flash/Flex, оба взаимодействуют через BlazeDS. Чтобы иметь одинаковые типизированные объекты на обоих сайтах, я использую генератор кода GAS3 (используется flex-mojos).
Но теперь я сталкиваюсь с проблемой обработки обнуляемых целых чисел. Проблема в том, что у меня есть объект (A), который содержит идентификатор внешнего ключа, который ссылается на необязательный объект B. - Но я отправляю идентификатор только клиенту flex.
На сайте Java это легко:
class A {
private Integer bFk;
getter/setter
}
Но на стороне гибкого клиента bFk имеет тип int. И Flash int не может быть нулевым. Таким образом, механизм удаленного взаимодействия преобразует нулевое целое число Java в 0. После отправки его обратно на сервер Java bFk становится равным 0 даже на стороне Java. - Это не приемлемо, потому что мне нужно отделить 0 и ноль.
Моя первая рабочая среда использует не Integer на стороне Java, а новый класс NullAbleID, который работает немного как обертка / адаптер, который оборачивает внутренний int, где -1 представляет собой ноль (я могу использовать -1 для нуля, потому что реальный идентификатор будет отрицательным). Но когда я использую это, это означает, что я должен заменить все идентификаторы Java Integer на этот класс NullAbleID.
Поскольку я считаю, что я не первый, кто сталкивается с этой проблемой, я прошу вас найти лучшее решение общего вопроса: как представить обнуляемое целое число в сценарии удаленного взаимодействия Java - Flex?
(Мне известен вопрос: flex-null-integer, но даже если это та же проблема, вопрос касается другой темы.)
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-turning-into-zeros-in-blazeds. Они говорят о преобразовании AS->Java, но, посмотрев на комментарии, вы найдете решение для Java->AS
Я бы держался подальше от модификации всех Integer с помощью класса-обёртки, мне не нравится подход, но это тоже решение.