You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

GWT编译Java代码时提示Double.sum方法未定义的问题求助

GWT编译Java代码时提示Double.sum方法未定义的问题求助

嗨,这个问题我刚好踩过坑,来给你唠唠~

你猜的完全没错,GWT确实存在Java API支持上的限制——它是把Java代码翻译成JavaScript运行的,只能对那些做了JRE模拟实现的Java API进行转译,而Double.sum()是Java 8才新增的方法,很多旧版本的GWT并没有对这个方法做模拟适配,所以编译时就会抛出“方法未定义”的错误,而普通Java 8项目用的是标准JRE环境,自然不会有问题。

给你几个实用的解决办法,按需选择:

  • 最直接的替换方案Double.sum(a, b)的逻辑本质上和a + b完全一致(都是遵循IEEE 754标准的浮点数加法,包括对NaN、无穷大等特殊值的处理),你可以直接把代码改成long c = Double.doubleToLongBits(a + b);,这样GWT编译肯定能过,功能也完全没差。
  • 升级GWT版本:如果你的项目允许升级,试试换到GWT 2.8及以上版本,从这个版本开始GWT对Java 8的API支持完善了很多,Double.sum()这类新增方法已经被包含在模拟库中了。
  • 自己封装替代方法:如果升级版本有顾虑,也可以自己写个小工具方法兜底,比如:
public static double doubleSum(double a, double b) {
    // 完全复刻Double.sum的逻辑,其实就是a + b,写清楚方便后续维护
    return a + b;
}

然后把原来的调用换成这个方法就行。

另外提一句,你可以去GWT官方的JRE Emulation文档里查哪些Java API是被支持的,不过有时候文档更新不及时,遇到这类问题优先考虑是不是版本支持或者API未被模拟的原因~

备注:内容来源于stack exchange,提问作者SIMDEI

火山引擎 最新活动