您好我有一个关于在groovy中使用TimeCategory的问题。 在我的项目中,我有独特的计算月数的方法。我想将它添加到TimeCategory。
public Integer calcMonateAboDays(def fromDate) {
Date startDate
if (fromDate instanceof String) {
startDate = fromDate.toDate()
} else if (fromDate instanceof Date) {
startDate = fromDate
} else {
assert false: "Wrong fromDate class: " + fromDate.getClass()
}
Date endDate = null
use(TimeCategory) {
endDate = startDate + 1.month
Calendar endCalendar = Calendar.getInstance()
endCalendar.setTime(endDate)
int lastDayOfMonth = endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH)
int endDayOfMonth = endCalendar.get(Calendar.DAY_OF_MONTH)
Calendar startCalendar = Calendar.getInstance()
startCalendar.setTime(startDate)
int startDayOfMonth = startCalendar.get(Calendar.DAY_OF_MONTH)
if (lastDayOfMonth != endDayOfMonth || startDayOfMonth == lastDayOfMonth) {
endDate--
}
}
return (endDate - startDate) + 1
}
如何将其添加到现有的TimeCategory类中,以便像这样使用:
Date date = new Date()
use(TimeCategory) {
System.out.print(date + 1.monateAbo)
}
这样的东西:
TimeCategory.metaClass.getMonateAbo() {
}
不起作用:(
答案 0 :(得分:1)
有几件事。
./result/result_Text_1364_3.png
,以便能够将其用作扩展方法。 The use
method适用于任何课程。 例如:
TimeCategory
现在,如果您希望能够在自定义扩展类中同时使用class MonateAboCategory {
static int getMonateAbo(Integer instance) {
// do calculations
}
static int getMonateAbo(Date instance) {
// do calculations
}
}
use(MonateAboCategory) {
println new Date() - 1.monateAbo
println new Date().monateAbo
}
和中定义的扩展方法,则可以嵌套TimeCategory
方法:< / p>
use
或者您可以将自定义扩展类定义为use(MonateAboCategory) {
use (groovy.time.TimeCategory) {
println new Date() + 3.months
println new Date() - 1.monateAbo
}
}
的子类:
TimeCategory