0

给了一个像

class MyDate extends java.util.Date {
   //add some functionality
}

您创建自己的Date对象,它继承了所有功能。

但是,如果您尝试像这样使用此功能

MyDate d = MyDate.parse('yyyy','2013')

您将遇到 parse 方法将返回一个java.util.Date无法转换为您的MyDate.

您可以通过该功能编写自己的演员表asType(),但这无济于事,因为您必须将其添加到Date()类中(我知道这是可能的,但我想避免它)。

有没有另一种方法来解决这个问题?

4

4 回答 4

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 转换)或编写自己的构造函数。

于 2013-02-11T19:24:35.600 回答
1

Ralf,您正在尝试继承静态方法,就好像它是实例方法一样。这行不通。做一个:

Date date = MyDate.parse(....) 

可以,但我不推荐它,因为它令人困惑:似乎 parse 方法在 MyDate 上,但实际上您仍然从 Date 调用静态 parse 方法。

或者。您可以在 MyDate 类上实现 parse 方法,并让该 parse 方法返回 MyDate 类。

于 2013-02-11T15:43:37.283 回答
0

对象 Date(已弃用)的 parse 方法不返回 Date 对象,而是返回静态 long。也许您的意思是 SimpleDateFormat ?

无论如何,在这种情况下,您必须重载所需的方法。

于 2013-02-11T15:40:23.410 回答
0

我认为你可以这样做:

MyDate d = (MyDate)Date.parse('yyyy','2013'); //tell me if i'm wrong but i'm pretty sure i'm not

然后将 MyDate 类中缺少的成员添加到新返回的对象中。

于 2013-02-11T16:18:25.263 回答