2012-02-22 4 views
0
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 
    } 

Ci-dessus est le code groovy. Je le débogue avec intellijidea 11, quand j'atteins la ligne n ° 7, j'ai trouvé que même si la condition est fausse, elle passe à la ligne 8, mais la liste foundFdrs ne grossit pas car elle ajoute un élément dans la liste. J'utilise ce code dans une application Web Grails, chaque fois que j'exécute cette application Web, j'obtiens la liste foundFdr vide même si la condition à la ligne 7 est vraie. J'ai également testé le code ci-dessus en créant un test d'intégration de grails, le test réussit, c'est-à-dire que j'obtiens la liste foundddrs avec certains éléments, mais pas dans mon application grails, où est le problème?Si la condition est exécutée, elle est fausse?

+0

Pourquoi ne pas ajouter une instruction println dans la clause if? Nous pouvons voir si la variable 2 est vraiment égale ou non. –

Répondre

-3

Je suppose que le problème se situe dans la condition "si". Vous avez year.toString() == foundYear.toString() qui dit essentiellement "if (string == string)", cependant l'opérateur == ne doit pas être surchargé pour comparer des chaînes dans Groovy (je ne connais pas vraiment Groovy, mais je programme en Java et Scala). Regardez dans la documentation de Groovy et voyez s'il y a une méthode "égale" pour la comparaison de chaînes, car je doute fortement que l'opérateur == fasse ce que vous vouliez. J'espère que cela aide un peu!

Depuis Groovy est un langage de type Java, vous pouvez vérifier cela = http://www.devdaily.com/java/edu/qanda/pjqa00001.shtml

+0

'" a "== str' est bien dans groovy –

+0

Ah, donc je vois maintenant. Je suis allé sur une supposition de loos qu'il a suivi la convention de Java, ma faute. Merci! –

1

Je soupçonne que, malgré le débogueur montrant que la ligne en cours d'exécution, il est en fait exécuté

Je ne sais pas pourquoi vous faites toString sur les deux vars soit ...

+0

Ajoutez un enregistrement à l'intérieur de l'instruction if pour déterminer si elle exécute réellement cette branche. –

-3

Une option sûre serait d'utiliser simplement utiliser StringUtils#equals

que deux cordes peut ou ne peut pas être comparé à l'aide « == »

+0

Pourriez-vous s'il vous plaît nous dire pourquoi pensez-vous que la réponse n'est pas bonne? comme StringUtils fournit un moyen pratique et null pour comparer deux chaînes. Quel est le problème avec l'approche? J'aime vraiment savoir pourquoi tu as eu envie de voter – Saurabh

+0

Je ne t'ai pas voté, mais c'est groovy, et '==' c'est tout ce dont tu as besoin –

Questions connexes