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




