Groovy 类型转换和继承
给一个像这样的班级Groovy 类型转换和继承,groovy,casting,Groovy,Casting,给一个像这样的班级 class MyDate extends java.util.Date { //add some functionality } 您可以创建自己的Date对象,该对象继承所有功能 但是如果你尝试像这样使用这个功能 MyDate d = MyDate.parse('yyyy','2013') 您将遇到这样的问题:parse方法将返回一个java.util.Date,该日期不能转换为您的MyDate 您可以通过asType()功能编写自己的强制转换,但这不会有帮助,因为
class MyDate extends java.util.Date {
//add some functionality
}
您可以创建自己的Date
对象,该对象继承所有功能
但是如果你尝试像这样使用这个功能
MyDate d = MyDate.parse('yyyy','2013')
您将遇到这样的问题:parse方法将返回一个java.util.Date
,该日期不能转换为您的MyDate
您可以通过asType()
功能编写自己的强制转换,但这不会有帮助,因为您必须将其添加到Date()
类中(我知道这是可能的,但我希望避免)
是否有其他方法可以解决此问题?对象日期的解析方法(已弃用)不会返回日期对象,而是返回静态long。也许你是说SimpleDateFormat
无论如何,在这种情况下,您必须重载所需的方法。对象日期的解析方法(已弃用)不会返回日期对象,而是返回静态long。也许你是说SimpleDateFormat
无论如何,在这种情况下,您必须重载所需的方法。Ralf,您试图继承一个静态方法,就像它将是一个实例方法一样。这不管用。做一个:
Date date = MyDate.parse(....)
将起作用,但我不推荐它,因为它令人困惑:似乎解析方法在MyDate上,但实际上您仍然从Date调用静态解析方法
或者。您可以在MyDate类上实现parse方法,并让该parse方法返回MyDate类。Ralf,您正在尝试继承一个静态方法,就像它将是一个实例方法一样。这不管用。做一个:
Date date = MyDate.parse(....)
将起作用,但我不推荐它,因为它令人困惑:似乎解析方法在MyDate上,但实际上您仍然从Date调用静态解析方法
或者。您可以在MyDate类上实现parse方法,并让该parse方法返回MyDate类。我认为您可以这样做:
MyDate d = (MyDate)Date.parse('yyyy','2013'); //tell me if i'm wrong but i'm pretty sure i'm not
然后将MyDate类中缺少的成员添加到新返回的对象中。我想您可以这样做:
MyDate d = (MyDate)Date.parse('yyyy','2013'); //tell me if i'm wrong but i'm pretty sure i'm not
然后将MyDate类中缺少的成员添加到新返回的对象中。Groovy的
Date.parse方法将返回一个日期对象。如果希望它返回MyDate
对象,则必须编写它(覆盖,但仍使用super):
您还需要继承构造函数(通过此groovy转换)或编写自己的构造函数。groovy的Date.parse
方法将返回一个日期对象。如果希望它返回MyDate
对象,则必须编写它(覆盖,但仍使用super):
您还需要继承构造函数(通过此groovy转换)或编写自己的构造函数。您部分是对的-groovy使用groovy JDK,而不是JDK。在groovyjdk中,parse并没有被弃用,而是返回一个日期:Marc,这就是我们所说的Groovy。该方法还没有被弃用,如图所示:,java.lang.String)您部分正确-groovy使用groovy JDK,而不是JDK。在groovyjdk中,parse并没有被弃用,而是返回一个日期:Marc,这就是我们所说的Groovy。该方法还没有被弃用,如图所示:,java.lang.String)我想避免实现自己的解析方法——这不是继承的目的吗?即使我实现了我自己的方法,我也会遇到强制转换的问题(我想我会使用Date.parse()
方法来实现它:-),我必须检查所有其他方法,看看哪些方法我必须重新实现(clearTime,减号,下一个,加上
),强制转换没有问题,因为它将返回方法所定义的类的类型。您只需使用Date.parse,并使用它构建MyDate,或者使用副本构造函数,或者以毫秒为单位传递时间。我想避免实现自己的解析方法—这不是继承的目的吗?即使我实现了我自己的方法,我也会遇到强制转换的问题(我想我会使用Date.parse()
方法来实现它:-),我必须检查所有其他方法,看看哪些方法我必须重新实现(clearTime,减号,下一个,加上
),强制转换没有问题,因为它将返回方法所定义的类的类型。您只需使用Date.parse,并使用它构建MyDate,或者使用复制构造函数,或者以毫秒为单位传递时间。