2016-01-22 13 views
0

Я хочу установить поля динамически в groovy, поэтому у меня есть код Java, который получает данные из базы данных, и я установил groovy поля, используя Bindings.setVariable() в java.Groovy Cast примитивный тип

Я хотел бы знать, можно ли использовать каждый примитивный тип в groovy. String до int, String до float и так далее. Так что я всегда мог отправить строку и бросить в другое примитивное время, это зависит от типа моих хороших полей.

ответ

2

Это зависит от того, что вы точно нужно, но следующий фрагмент кода работает хорошо:

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

Это именно то, что я хочу Thanks –

+0

@SteevenBrunner, если это то, что вам нужно, пожалуйста, примите ответ. – Opal

3

@ решение опала as хорошо, но я также хотел бы отметить, что Groovy JDK добавляет удобный примитивную проверку и методы преобразования в CharSequence, который Строка реализует:

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

Интересно, что isFloat кажется жадничать, возвращая true плавающей точки за пределы его диапазона.

['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" 
    } 
} 

печатает

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

Отлично, спасибо! – Opal

+0

Я бы использовал 'switch (s.toString())' для более безопасной стороны, потому что 'is *()' применяется только к 'String'. Если «Number» или «null» в приведенном выше списке случайно не пройдут проверку. – dmahapatro