Date 在groovy中,我可以在一个日期范围内调用get(I)或getFrom()吗?
我有一个方法需要groovy中的一个范围,并且我在传入类似 新日期(“1999年1月1日”)…新日期(“1999年1月1日”) 但我更愿意在一个日期内通过(作为范围) 当我把它打印出来时,它看起来不错 范围=起始日期作为范围 这将显示在控制台中 [1999年1月1日星期五00:00:00 CST] 但现在,当我尝试执行.get(I)或.getFrom()时,它没有说Date 在groovy中,我可以在一个日期范围内调用get(I)或getFrom()吗?,date,groovy,range,Date,Groovy,Range,我有一个方法需要groovy中的一个范围,并且我在传入类似 新日期(“1999年1月1日”)…新日期(“1999年1月1日”) 但我更愿意在一个日期内通过(作为范围) 当我把它打印出来时,它看起来不错 范围=起始日期作为范围 这将显示在控制台中 [1999年1月1日星期五00:00:00 CST] 但现在,当我尝试执行.get(I)或.getFrom()时,它没有说 groovy.lang.MissingMethodException: No signature of method: java.
groovy.lang.MissingMethodException: No signature of method: java.util.Date.getFrom() is applicable for argument types: () values: []
Possible solutions: getDate(), getDay(), getTime(), getYear(), before(java.util.Date), getAt(int)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:54)
at org.codehaus.groovy.runtime.InvokerHelper$invokeMethod.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
at Date_delegateProxy.getFr
任何人在groovy中尝试强制转换并使用单个日期作为范围都会成功吗?在groovy中,
as
操作符调用对象上的asType
方法,并将其转换为类作为参数。提供我所知道的Groovy附带的所有实现,其中没有一个转换为Range
如果你需要重写Atype来支持范围,但是我想大多数人会考虑滥用操作符重载和这样的拙劣实践,我实际上很犹豫提供一个例子。尽管如此,这应该符合你的要求
// Save the original asType method so that it can be called by the overridden one
final f = Date.metaClass.getMetaMethod('asType', [Class] as Class[])
// Replace the default asType method for Date objects
Date.metaClass.asType = { final Class it ->
// For ranges convert the date into a range with the date as both the start
// and end. For other types, use the default implementation of asType
return it == Range? (delegate..delegate) : f.invoke(delegate, it)
}
final start = new Date()
final end = start
assert start..end == start as Range