我对groovy很新(并且没有任何Java经验) - 但是我遇到了一个对我没有意义的问题。我的猜测是我对这些语言中对象和类如何工作的误解。我的问题可能非常基础 - 非常感谢任何帮助。
我正在尝试计算两个日期之间的周数。我的代码是这样的(它可能更简洁,但我已经扩展它以使每一步更清晰):
import groovy.time.TimeCategory
start = new Date(year: 2014, month: Calendar.APRIL, date: 1, hours: 12, minutes: 12, seconds: 0)
finish = new Date(year: 2014, month: Calendar.MAY, date: 4, hours: 1, minutes: 12, seconds: 0)
use ( TimeCategory ) {
diff = finish - start
println getWeeks(diff)
}
我收到错误
groovy.lang.MissingMethodException:没有方法签名:Script1.getWeeks()适用于参数类型:(groovy.time.TimeDuration)值:[32天,13小时]
但是,如果我将打印行更改为println diff.getClass().name
我的结果输出是
groovy.time.TimeDuration
所以我的问题基本上是:如果diff
对象是类groovy.time.TimeDuration
并且getWeeks需要此类的参数,为什么我会收到错误?
答案 0 :(得分:1)
你应该使用:
use ( TimeCategory ) {
diff = finish - start
println diff.weeks
}
你在groovy doc static Duration getWeeks(Integer self)
中看到的是groovy系统如何调用方法。
几乎所有这些静态groovy方法都有这种形式:static doSmth( self, otherArgs... )
,您必须将其称为self.doSmth( otherArgs... )