Flex 空整数

发布于 2024-08-23 19:42:17 字数 202 浏览 3 评论 0原文

我通过 AMF (BlazeDS) 将数据从 Java 获取到 Flex

在 java 端对象中有 Integer 字段。所以它可以为空。

在 Flex 中,对象是 int。所以null值被反序列化为0。

这不是我想要的,我想看看它是0还是null。

Flex 是否有像(Java 中的 Integer)这样的包装器? 谢谢

I take data from Java to Flex by AMF (BlazeDS)

In java side object has Integer field. So it can be null.

In Flex side object is int. So null values are deserialized as 0.

This is not what I want, I want to see whether it is 0 or null.

Is there wrapper like (Integer in Java) for Flex?
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

猫七 2024-08-30 19:42:17

据我所知,没有这样的包装器。如果构造函数的参数为​​ null,您可以编写一个将 NaN 分配给内部 int 的代码

As far as I can tell, there is no such wrapper. You can write one that assigns NaN to the internal int if the argument to the constructor is null

雄赳赳气昂昂 2024-08-30 19:42:17

我们通过创建一个重写 setValue 和 getValue 的 BeanProxy 类来解决这个问题。在那里,如果值是 Number 且为 null,我们将 NaN 返回到 Flex 端;如果值为 Double 和 NaN,我们将 null 返回到 Java 端。完成的工作:

@Override
public void setValue(Object instance, String propertyName, Object value) {
    if ((value instanceof Double)) {
        Double doubleValue = (Double) value;
        if (doubleValue != null && doubleValue.isNaN()) {
            super.setValue(instance, propertyName, null);
        }
    }else{
          super.setValue(instance, propertyName, value);
        }
}

@Override
public Object getValue(Object obj, String propertyName) {
    final Class classType = super.getType(obj, propertyName);
    if (isNumber(classType) && super.getValue(obj, propertyName) == null) {
        return Double.NaN;
    }
    return super.getValue(obj, propertyName);
}

We solved this by creating a BeanProxy class which overrides setValue and getValue. In there we return NaN to the flex side if the value is a Number and null, and we return null to the Java side if it's a Double and NaN. Job done:

@Override
public void setValue(Object instance, String propertyName, Object value) {
    if ((value instanceof Double)) {
        Double doubleValue = (Double) value;
        if (doubleValue != null && doubleValue.isNaN()) {
            super.setValue(instance, propertyName, null);
        }
    }else{
          super.setValue(instance, propertyName, value);
        }
}

@Override
public Object getValue(Object obj, String propertyName) {
    final Class classType = super.getType(obj, propertyName);
    if (isNumber(classType) && super.getValue(obj, propertyName) == null) {
        return Double.NaN;
    }
    return super.getValue(obj, propertyName);
}
撞了怀 2024-08-30 19:42:17

Amargosh 给出了正确的答案,但是当您继续完成您的项目时,您会发现,当您应用“一切都是字符串”规则时,amf 世界的生活变得更加轻松。只是一个从长远来看可能有很大帮助的建议。

祝你好运,
杰里米

Amarghosh has the correct answer, but you'll find as you continue through your project that life is so much easier in the amf world when you apply the "everything is a string" rule. Simply a suggestion that might help a lot in the long run.

Best of luck,
Jeremy

友欢 2024-08-30 19:42:17

正如 Amargosh 回答的那样,没有这样的包装器。作为解决方法,我们检查 -1 的 int 值,该值等于我们域中未分配的 int 值。

As Amarghosh answered, there is no such wrapper. As a workaround, we check the int value for -1 which equals an unassigned int value in our domain.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文