gpt4 book ai didi

java - 多次 SQL 查询后出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 13:31:35 25 4
gpt4 key购买 nike

我有一个奇怪的行为:

我有一个从数据库获取一些数据的方法

public void calculate(Run run, Map<String, Curve> epe) {
for (Entry<String, Curve> entry : epe.entrySet()) {
Entity ntt = leDAO.getById(entry.getKey(), run);

double lgd = leDAO.getLgd(ntt, run);
Curve dp = curveDAO.getDp(entry.getKey(), run);
String currency = leDAO.getCurrency(ntt, run);
Curve df = curveDAO.getDf(currency, run);

double val = 0.0;
for (int i = 0; i < pd.size(); i++) {
cva += entry.getValue().get(i) * df.get(i) * dp.get(i);
}
val *= lgd;
}
}

调试时,外循环进行到一半时,它停在这一行,尽管我没有设置断点:

double lgd = leDAO.getLgd(ntt, run);

然后,它抛出一个 NullPointerException,但我找不到 null 的内容(leDAO、ntt 和 run 都设置为 null 以外的值)。我无法进入 getLgd() 方法(如果我进入,我会从 Thread.class 进入dispatchUncaughtException())。该 map 大约有 150 个按键。

编辑getLgd() 方法:

public Double getLgd(Entity entity, Run run) throws HibernateException {
if (session == null) {
session = sessionFactory.openSession();
}
SQLQuery select = session.createSQLQuery(RECOVERY_SELECT);
select.setLong(0, run.getRunId());
select.setString(1, entity.getId());
BigDecimal result = (BigDecimal) select.uniqueResult();
Double lgd = null;
if (result != null) {
entity.setRr(result);
BigDecimal one = new BigDecimal(1);
BigDecimal normalLgd = one.subtract(result);
lgd = normalLgd.doubleValue();
}
return lgd;
}

最佳答案

以下是空指针异常的潜在原因:

public Double getLgd(... stuff)
{
Double lgd = null;
if (result != null)
{
... blah
}

return lgd;
}


double ILikeNullPointerExceptionsWhenResultIsNull = getLgd();

说明

Double 值到 double 值的 Autobox 转换包括对 Double 值的隐式取消引用。例如:

Double blam = null;
double hoot;

hoot = blam;

语句 hoot = blamhoot = blam.doubleValue() 没有什么不同。取消引用上面的 blam 变量将导致 NullPointerException。

关于java - 多次 SQL 查询后出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21533072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com