java 错误 "SNO: '+=' reconversion failed" 的含义?
Meaning of java error "SNO: '+=' reconversion failed"?
我在通过 Jenkins 显示的 Pentaho 数据集成(PDI,a.k.a.Kettle)日志中遇到了一个神秘错误:
org.codehaus.janino.CompileException: SNO: "+=" reconversion failed
唯一包含“+=”的代码是这样的...
import java.util.Iterator;
import java.util.Map;
import java.util.HashMap;
private static final String validKeys = "thing zero,thing two";
private Map/*<String, Long>*/ mapCount;
public boolean init ... {
mapCount = new HashMap/*<String, Long>*/();
}
public boolean processRow ... {
mapCount.put("thing zero", 0L);
mapCount.put("thing one", 1L);
Long calcUnidentified = 0L;
Long calcTotal = 0L;
Iterator it = mapCount.entrySet().iterator();
while (it.hasNext()) {
Map.Entry keyValuePair = (Map.Entry) it.next();
String currentKey = keyValuePair.getKey().toString();
Long currentValue = Long.valueOf(keyValuePair.getValue().toString());
if (!validKeys.contains(currentKey)) {
calcUnidentified += currentValue;
}
calcTotal += currentValue;
}
}
我试过了:
- googled/ecosia 错误信息
- 在堆栈溢出中搜索错误消息:无
- 在堆栈溢出中搜索各个概念:每个概念都不错
- 查看了Long.valueOf、+=和HashMap的.put、.getKey、.getValue
的兼容类型和return类型等细节
- 在 w3schools 在线测试了部分代码 java 测试人员
- 将
public boolean processRow
替换为他们通常的 public static void main
- 此代码在 w3schools 中没有错误,但在我替换它太多以至于我实际上只是在测试组件之前变为空白。
- 而 Janine 似乎不喜欢替代方案,在 for 循环中使用冒号进行迭代——应为分号。
对于 java 来说听起来很奇怪,解决方案是简单地替换...
calcUnidentified += currentValue;
...与...
calcUnidentified = calcUnidentified + currentValue;
正如 Thomas Kläger 指出的那样,这个错误似乎是 Janino 特有的(PDI 将其用于 java)。
我在通过 Jenkins 显示的 Pentaho 数据集成(PDI,a.k.a.Kettle)日志中遇到了一个神秘错误:
org.codehaus.janino.CompileException: SNO: "+=" reconversion failed
唯一包含“+=”的代码是这样的...
import java.util.Iterator;
import java.util.Map;
import java.util.HashMap;
private static final String validKeys = "thing zero,thing two";
private Map/*<String, Long>*/ mapCount;
public boolean init ... {
mapCount = new HashMap/*<String, Long>*/();
}
public boolean processRow ... {
mapCount.put("thing zero", 0L);
mapCount.put("thing one", 1L);
Long calcUnidentified = 0L;
Long calcTotal = 0L;
Iterator it = mapCount.entrySet().iterator();
while (it.hasNext()) {
Map.Entry keyValuePair = (Map.Entry) it.next();
String currentKey = keyValuePair.getKey().toString();
Long currentValue = Long.valueOf(keyValuePair.getValue().toString());
if (!validKeys.contains(currentKey)) {
calcUnidentified += currentValue;
}
calcTotal += currentValue;
}
}
我试过了:
- googled/ecosia 错误信息
- 在堆栈溢出中搜索错误消息:无
- 在堆栈溢出中搜索各个概念:每个概念都不错
- 查看了Long.valueOf、+=和HashMap的.put、.getKey、.getValue 的兼容类型和return类型等细节
- 在 w3schools 在线测试了部分代码 java 测试人员
- 将
public boolean processRow
替换为他们通常的public static void main
- 此代码在 w3schools 中没有错误,但在我替换它太多以至于我实际上只是在测试组件之前变为空白。
- 而 Janine 似乎不喜欢替代方案,在 for 循环中使用冒号进行迭代——应为分号。
对于 java 来说听起来很奇怪,解决方案是简单地替换...
calcUnidentified += currentValue;
...与...
calcUnidentified = calcUnidentified + currentValue;
正如 Thomas Kläger 指出的那样,这个错误似乎是 Janino 特有的(PDI 将其用于 java)。