通过GWT编译Java代码时类型不连贯

问题描述 投票:0回答:1

我正在使用 GWT 库构建一个 Web 项目。由于某种原因,在通过 GWT 编译类似于此的代码时

double a = 0, b = 0;
long c = Double.doubleToLongBits(Double.sum(a, b));

它给了我以下错误:

The method sum(double, double) is undefined for the type Double

如果我在普通的 Java 8 项目中编写完全相同的代码,那不会给我带来任何麻烦。我感觉 GWT 库在从 Java 转换为 JavaScript 时有一些限制,但我找不到通过文档确认这一点的方法。

java eclipse types gwt undefined-behavior
1个回答
0
投票

GWT 的 JRE 模拟有些限制,有几类东西不受支持。这些通常与 IO、反射和线程相关,但数字也会导致一些限制。例如,完全模拟 Java float 的成本很高(JS 的

Number
类型实际上是 Java
Double
,即使对于 int 操作也是如此),因此某些操作可能比预期更精确。

GWT 网站包含当前支持的所有 JRE 模拟的列表,网址为 https://www.gwtproject.org/doc/latest/RefJreEmulation.html。这是针对最新版本的 - GWT 强调不要破坏向后兼容性,除非确信这无关紧要(例如 IE 的消亡),或者由于依赖项升级而没有其他选择(GWT 2.12 将放弃对 Java 的支持) 8 以便可以编译 Java 17 源代码)。

添加

Double.sum(double, double)
的提交是 https://github.com/gwtproject/gwt/commit/ac5d74820b313d17fc0bcab902195afba7f5c59c,适用于 GWT 2.8,这是第一个可以编译 Java 8 源代码的版本。这是有道理的,因为该方法首先添加到 Java 8 中的 JRE 中,请参阅 https://docs.oracle.com/javase/8/docs/api/java/lang/Double.html#sum-double-double -

自:

1.8

GWT 2.7 太旧了,无法期望任何 Java 8 功能可以在其上运行。即使 GWT 2.8 已经有 8 年多了......

© www.soinside.com 2019 - 2024. All rights reserved.