Android Java调用if和else代码块
我正在使用ORMLite,并创建了一个从ORMLite DAO框架扩展而来的自定义DAO。在自定义dao中,我重写了create方法,并添加了一些逻辑。我查询一个实体列表,如果不存在,则创建一个新实体,如果存在,则返回现有实体的id。查询工作正常,因为我正在运行时调试和检查列表对象。但是,只要列表大小为0,它就会执行if..else的第一个块,然后执行第二个块,完全忽略return语句。如果列表不是空的,它将按预期工作 有人知道为什么这会显得很古怪吗?我甚至将覆盖方法的名称改为“persist”,以防它出于某种原因递归地调用自己,但它不起作用Android Java调用if和else代码块,java,android,if-statement,Java,Android,If Statement,我正在使用ORMLite,并创建了一个从ORMLite DAO框架扩展而来的自定义DAO。在自定义dao中,我重写了create方法,并添加了一些逻辑。我查询一个实体列表,如果不存在,则创建一个新实体,如果存在,则返回现有实体的id。查询工作正常,因为我正在运行时调试和检查列表对象。但是,只要列表大小为0,它就会执行if..else的第一个块,然后执行第二个块,完全忽略return语句。如果列表不是空的,它将按预期工作 有人知道为什么这会显得很古怪吗?我甚至将覆盖方法的名称改为“persist”
@Override
public int create(DigitalAsset dAsset) throws SQLException {
List<DigitalAsset> assets = this.queryForMatching(dAsset);
if (assets.size() == 0) {
return super.create(dAsset);
}
else {
return assets.get(0).getId();
}
}
@覆盖
公共int create(DigitalAsset dAsset)引发SQLException{
列表资产=this.queryForMatching(dAsset);
如果(assets.size()==0){
返回super.create(dAsset);
}
否则{
返回资产。get(0.getId();
}
}
我现在觉得自己很笨,但经过进一步研究,我发现ORMLite create方法返回的是受影响行的数量,而不是id。结果表明,代码根本没有在两个块中运行。很晚了,我当时可能还没有完全意识到。你确定super.create
不只是返回相同的ID吗?您是否尝试在每个if/else
块中放置日志语句?老实说,这绝对没有理由发生。不仅else
只在不为空时执行,而且return
应该结束该方法。Hmmmm。。。您确定它正在返回资产.get(0).getId()
?如果它去了别的地方,不是会出错吗?有时,由于字节码的生成方式,调试器会转到不同的返回语句。您可以尝试更改逻辑,使其不具有返回,例如intid=-1;如果(0){id=super…}否则{id=assets…}返回id;}代码>我还尝试设置一个int,然后返回它。我知道它正在两个模块中运行,因为我已经调试了代码并逐步完成。这就是正在发生的事情。