我对这些代码行有一个奇怪的问题(for循环仅用于我的调试):
protected final List<Long> extractIdFromResult(Map<String, Object> pResult, String pKey) {
for (String key : pResult.keySet()) {
Object o = pResult.get(key);
if (null == o){
System.out.println("is null");
}
}
return new SqlArrayExtractor<Long>(pResult.get(pKey)).extract(new Transformer() {
@Override
public Long transform(Object pInput) {
return Long.valueOf(((BigDecimal) pInput).longValue());
}
});
}
调用该方法从StoredProcedure中提取id(long)。
永远不会将is null
写入控制台,因为if (null == o){
不为空,我永远不会输入o
。
然而,如果我输入public Long transform(Object pInput)
pInput
,则始终为空!
怎么会发生这种情况?该行非常有用:Object o = pResult.get(key);
感谢您的帮助
的Stefan
答案 0 :(得分:1)
pKey可能在地图中不可用,因此请运行以下代码以检查它是否存在。 循环永远不会为空,因为你正在迭代你从地图获得的键集。
protected final List<Long> extractIdFromResult(Map<String, Object> pResult, String pKey) {
System.out.println("is pKey available in map "+pResult.get(pKey));
// There is a chance that the pKey can be something which is not available in the map.
return new SqlArrayExtractor<Long>(pResult.get(pKey)).extract(new Transformer() {
@Override
public Long transform(Object pInput) {
return Long.valueOf(((BigDecimal) pInput).longValue());
}
});
}