Den*_* S. 1 math groovy object
这对我来说似乎很奇怪,完全让我站在愿意使用普通java的人的一边.在编写基于groovy的应用程序时,我遇到了这样的事情:
int filesDaily1 = (item.filesDaily ==~ /^[0-9]+$/) ?
Integer.parseInt(item.filesDaily) : item.filesDaily.substring(0, item.filesDaily.indexOf('.'))
def filesDaily = (item.filesDaily ==~ /^[0-9]+$/) ?
Integer.parseInt(item.filesDaily) : item.filesDaily.substring(0, item.filesDaily.indexOf('.'))
Run Code Online (Sandbox Code Playgroud)
因此,知道item.filesDaily是一个值为'1 ..*'的String,怎么可能,filesDaily1等于49而filesDaily等于1?
更重要的是,在尝试做类似的事情时
int numOfExpectedEntries = filesDaily * item.daysToCheck
Run Code Online (Sandbox Code Playgroud)
抛出一个例外
Cannot cast object '111' with class 'java.lang.String' to class 'int'
Run Code Online (Sandbox Code Playgroud)
用乘法指向那条确切的代码行.怎么会发生这种情况?
您将此值分配给int:
item.filesDaily.substring(0, item.filesDaily.indexOf('.'))
Run Code Online (Sandbox Code Playgroud)
我猜 Groovy正在将单字符串"1"转换为char'1',然后在正常的char-to-int转换中获取Unicode值...所以最终得到值49.
如果要将字符串解析为十进制数,请使用Integer.parseInt而不是内置转换.
filesDaily1和之间的区别在于filesDaily你告诉Groovy这filesDaily1是一个int,所以它正在应用转换为int.我怀疑filesDaily在你的测试用例中实际上是字符串"1".
我怀疑你真的只想将代码更改为:
String text = (item.filesDaily ==~ /^[0-9]+$/) ? items.filesDaily :
item.filesDaily.substring(0, item.filesDaily.indexOf('.'))
Integer filesDaily = text.toInteger()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |