在Java - Flex远程处理应用程序中处理可为空的Integer的最佳实践?

时间:2011-02-10 10:22:12

标签: java flex blazeds amf

我有一个由Java Server部分和Flash / Flex客户端组成的应用程序,它们都通过BlazeDS进行通信。为了在两个站点上都有相同的类型对象,我使用GAS3代码生成器(由flex-mojos使用)。

但是现在我面临处理可空的整数的问题。问题是我有一个Object(A),它包含一个引用可选对象B的外键ID。 - 但我只将ID发送给Flex客户端。

在Java站点上很容易:

class A {
  private Integer bFk;
  getter/setter
}

但在Flex客户端,bFk的类型为int。并且Flash int不能为null。所以 远程处理机制将Java null Integer转换为0.将其发送回服务器后,即使在Java端,Java bFk也会变为0。 - 这是不可接受的,因为我需要将0和null分开。

我的第一个workround在Java端使用的不是Integer,而是一个新的Class NullAbleID,它有点像包装器/适配器,它包装了一个内部int,其中-1表示null(我可以使用-1表示null) ,因为真实身份将是负面的)。但是当我使用它时,这意味着我必须用这个NullAbleID类替换所有Java Integer id。

因为我相信我不是第一个遇到此问题的人,所以我请求您更好地解决一般问题:如何在Java中表示可以为空的整数 - Flex远程处理场景?

(我知道问题:flex-null-integer,但即使问题相同,问题仍然是另一个问题。)

1 个答案:

答案 0 :(得分:2)

一个想法是使用标志值。像-1或NaN。

看看这个错误:https://bugs.adobe.com/jira/browse/BLZ-74 - 你可以看到它被认为是一种语言限制,并且不会通过分配NaN来修复(如某些建议的那样)。

如果您想自己选择NaN方法,请查看来自http://flexblog.faratasystems.com/2010/01/07/how-to-keep-numeric-null-value-from-turning-into-zeros-in-blazeds的Farata博客。他们正在讨论AS-> Java转换,但是根据评论,您将找到Java-> AS

的解决方案。

我不会用包装类修改所有整数,我不喜欢这种方法 - 但它也是一种解决方案。