万一有人在寻找答案时偶然发现了这个旧线程:
在我看来,错误出现在 JS 引擎的编译器部分。
片段1:
var i = 0;
if (i < -2147483648) {
console.log("less");
} else {
console.log("greater");
}
片段 2:
var i = 0;
var j = i < -2147483648;
if (j) {
console.log("less");
} else {
console.log("greater");
}
虽然片段 1 通过记录“less”来显示错误,但片段 2 不会。
因此,为了解决这个错误,我们检查了 GWT 源代码并使用此补丁编译了我们自己的 SDK。从那以后我们就没有遇到过 Integer.parseInt 的问题。
diff --git a/gwt240/source/user/super/com/google/gwt/emul/java/lang/Number.java b/gwt240/source/user/super/com/google/gwt/emul/java/lang/Number.java
index 04a85e1..abb3e5c 100644
--- a/gwt240/source/user/super/com/google/gwt/emul/java/lang/Number.java
+++ b/gwt240/source/user/super/com/google/gwt/emul/java/lang/Number.java
@@ -221,9 +221,10 @@ public abstract class Number implements Serializable {
}
int toReturn = __parseInt(s, radix);
+ boolean isTooLow = toReturn < lowerBound;
if (__isNaN(toReturn)) {
throw NumberFormatException.forInputString(s);
- } else if (toReturn < lowerBound || toReturn > upperBound) {
+ } else if (isTooLow || toReturn > upperBound) {
throw NumberFormatException.forInputString(s);
}
链接到 GWT 错误报告:http ://code.google.com/p/google-web-toolkit/issues/detail?id=7291