- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下由长值组成的 JsonArray:
[1234567873,852369471,9517,789 ,4826,96127435]
Long , Long ,Long,Long,Long, Long
通过事件总线发送后,有一个由整数和长整型组成的 JsonArray:
[1234567873,852369471,9517 ,789 ,4826 ,96127435]
Long , Long ,Integer,Integer,Integer,Long
显然Vertx
缩小了小数字-Longs以节省内存-这就是为什么当我尝试以下代码时我得到Cannot cast from Integer to Long
-ClassCastException:
List<Long> collect = jsonArray.stream().map(element -> (Long) element).collect(Collectors.toList());
与以下代码行相反:
for (int jsonArrayIndex = 0; jsonArrayIndex < jsonArray.size(); jsonArrayIndex++) {
Long longValue = jsonArray.getLong(jsonArrayIndex);
}
这如何运作?
最佳答案
JSON 没有 Long 或 Integer 的概念,只有更一般的概念 number
(请参阅 json.org 上的 JSON 规范)。因此,由您的代码决定将特定 JSON 数字解析为哪个对象(即 Integer 或 Long)。
通过使用 jsonArray.stream()
(返回 Stream<Object>
)您允许 Vertx
库来决定将每个元素解析为哪个对象。在这种情况下,它会为每个元素一一选择最合适的类型,即有些元素被解析为Long
。一些进入 Integer
。如果您有任何类似 1.5
的数字,这些可能会被解析为 Double
(不过你需要检查一下)。
但是,通过使用 jsonArray.getLong()
方法,你告诉Vertx
您已经决定将每个元素解析为哪个对象(a Long
)a,因此它不会试图通过为每个元素选择最合适的类型来变得聪明。如果您有任何类似 1.5
的号码在这里,此方法可能会抛出异常(同样,您必须检查这一点)。
关于java - 顶点 : My JsonArray consisting of Long values becomes suddenly a mix of Integer- and Long-Values?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39548528/
我是一名优秀的程序员,十分优秀!