我有很多代码使用并期待java.util.Date,我想迁移到org.joda.time.LocalDate。问题是大多数代码都是动态输入的。
所以我想知道是否有任何groovy方法来拦截ClassCastException,在运行时进行转换(而不是让异常冒泡)并记录操作(所以我可以修复代码)。
示例:
import org.joda.time.LocalDate
def someMethod(date) {
println date.year()
}
// this call is ok
someMethod(new LocalDate())
// this call raises an exception
someMethod(new Date())
我不想修改上面的代码,例如使用try-catch包围第二个调用并使用正确的类型调用。我想要一种全球范围内的方法。
答案 0 :(得分:0)
创意1:
您可以从Groovy多方法中受益:您为JodaTime编写方法重载,并在它是动态方法参数时选择java.util.Date方法:
def someMethod(date) {
println date.year()
}
我的建议是在这个类中写入执行转换的这些方法的重载:
def someMethod(LocalDate date) {
someMethod date.convertToJavaDate()
}
如果您无权访问该代码,则可以使用元编程。
创意2:
如果你有一个庞大的图书馆,我的猜测是你最好混合JodaTime课程。鸭子打字你将获得力量优势。您将需要知道调用java.util.Date中的哪些成员并将它们重新路由到Joda自己的方法:
class LocalDateMixin {
def year() { this[Calendar.YEAR] }
}
LocalDate.metaClass.mixin LocalDateMixin
您还可以使用extension methods来应用元编程。