给出类似
的课程class MyDate extends java.util.Date {
//add some functionality
}
您创建了自己的Date
对象,该对象继承了所有功能。
但是如果您尝试使用此功能
MyDate d = MyDate.parse('yyyy','2013')
您将遇到一个问题,即解析方法将返回java.util.Date
,而MyDate
无法投放到asType()
。
你可以通过Date()
功能编写自己的演员阵容,但这没有用,因为你必须将它添加到{{1}}类(我知道这是可能的,但我想避免它。)
有没有其他方法可以解决这个问题?
答案 0 :(得分:3)
Groovy的Date.parse
方法将返回Date对象。如果你想要它返回你的MyDate
对象,你必须写它(覆盖,但仍然使用超级):
@groovy.transform.InheritConstructors class MyDate extends java.util.Date {
static MyDate parse(String format, String date) {
new MyDate( Date.parse(format, date).time )
}
String formated() {
format 'dd/MM/yyyy'
}
}
MyDate d = MyDate.parse('yyyy-MM-dd','2013-09-03')
assert d.formated() == "03/09/2013"
您还需要继承构造函数(通过这个groovy变换)或编写自己的构造函数。
答案 1 :(得分:1)
Ralf,您正在尝试继承一个静态方法,就好像它是一个实例方法一样。这不起作用。做一个:
Date date = MyDate.parse(....)
会工作,但我不推荐它,因为它令人困惑:似乎解析方法在MyDate上,但实际上你仍然在调用Date的静态解析方法。
可替换地。你可以在你的MyDate类上实现parse方法,让那个parse方法返回一个MyDate类。
答案 2 :(得分:0)
对象的解析方法Date(不建议使用)不返回Date对象而是返回静态long。也许你的意思是SimpleDateFormat?
无论如何,在这种情况下你必须重载你需要的方法。
答案 3 :(得分:0)
我认为你可以这样做:
MyDate d = (MyDate)Date.parse('yyyy','2013'); //tell me if i'm wrong but i'm pretty sure i'm not
然后将MyDate类中缺少的成员添加到新返回的对象中。