2016-01-22 5 views
0

Je veux définir des champs dynamiquement dans groovy donc j'ai un code java qui obtient des données d'une base de données et je définis les champs groovy en utilisant Bindings.setVariable() en java.Groovy Cast type primitif

Je voudrais savoir s'il est possible de lancer chaque type primitif dans groovy. String à int, String à float et ainsi de suite. Donc, je pourrais toujours envoyer une chaîne et lancer dans un autre temps primitif, cela dépend du type de mes champs groovy.

Répondre

2

Cela dépend de ce dont vous avez besoin exactement, mais le morceau de code suivant fonctionne bien:

assert '2' as Integer == 2 
assert '2.2' as Double == 2.2 
+0

C'est exactement ce que je veux merci –

+0

@SteevenBrunner, si c'est ce que vous avez besoin, s'il vous plaît accepter la réponse. – Opal

3

@ solution Opal as est bonne, mais je voulais aussi mentionner que le JDK Groovy ajoute une vérification primitive pratique et les méthodes de conversion à CharSequence, qui met en œuvre à cordes:

  • isDouble et asDobule
  • isFloat et asFloat
  • et asLong
  • isInteger et asInteger

Fait intéressant, il isFloat semble être gourmand, retour true pour les points flottant au-delà de sa gamme.

['2', '2.2', '2' * 10, "${Double.MAX_VALUE}"].each { s -> 
    switch (s) { 
     case { it.isInteger() }: 
      int i = s.toInteger() 
      println "String '$s' -> int $i" 
      break 
     case { it.isLong() }: 
      long l = s.toLong() 
      println "String '$s' -> long $l" 
      break 
     case { it.isFloat() }: 
      float f = s.toFloat() 
      println "String '$s' -> float $f" 
      break    
     case { it.isDouble() }: 
      double d = s.toDouble() 
      println "String '$s' -> double $d" 
      break  
     default: 
      println "$s is not a supported primitive" 
    } 
} 

imprime

String '2' -> int 2 
String '2.2' -> float 2.2 
String '2222222222' -> long 2222222222 
String '1.7976931348623157E308' -> float Infinity 
+0

Super, merci !! – Opal

+0

Je voudrais utiliser 'switch (s.toString())' pour être du côté plus sûr parce que 'is *()' est seulement appliqué à 'String'. Avoir un 'Number' ou' null' dans la liste ci-dessus par hasard échouerait les vérifications. – dmahapatro