def findFdrsWithMaturityYear(year){
def fdrs = Fdr.findAll()
def foundFdrs = new ArrayList<Fdr>()
def foundYear
fdrs.each {
foundYear = DateUtils.getYearFromDate(it.maturityDate)
if (year.toString() == foundYear.toString()){ // line 7
foundFdrs.add(it) // line 8
}
}
return foundFdrs
}
上面是groovy代码。我用intellijidea 11调试它,当我到达第7行时,我发现即使条件为假,它也会进入第8行,但是findFdrs列表不会增长,因为它在列表中添加了一个元素。我在grails web应用程序中使用此代码,每次运行此Web应用程序时,即使第7行的条件为真,我也会得到空的foundFdr列表。我还通过创建grails集成测试测试了上面的代码,测试成功通过,即我得到了带有一些元素的foundFdrs列表,但是在我的grails应用程序中没有,问题出在哪里?
答案 0 :(得分:1)
我怀疑尽管调试器显示该行正在执行,但它实际上并未执行
不确定为什么要在两个变量上执行toString ...
答案 1 :(得分:-3)
我认为问题在于“if”条件。你有year.toString()== foundYear.toString()本质上是说“if(string == string)”,但是==运算符可能没有重载来比较Groovy中的字符串(我真的不知道Groovy,但我用Java和Scala编程)。查看Groovy文档,看看是否有任何“equals”方法进行字符串比较,因为我非常怀疑==运算符会执行您想要的操作。希望这有点帮助!
由于Groovy是一种类似Java的语言,您可能需要检查一下= http://www.devdaily.com/java/edu/qanda/pjqa00001.shtml
答案 2 :(得分:-3)
安全选项是使用StringUtils#equals
因为使用“==”
可能会或可能不会比较两个字符串