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,或者使用复制构造函数,或者以毫秒为单位传递时间。