0

のようなクラスを与えられた

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

Dateすべての機能を継承する独自のオブジェクトを作成します。

しかし、この機能をこのように使用しようとすると

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

java.util.Dateparse メソッドがにキャストできないを返すという問題が発生します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

ラルフ、静的メソッドをインスタンス メソッドのように継承しようとしています。これはうまくいきません。やっていること:

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

動作しますが、紛らわしいのでお勧めしません: parse メソッドが MyDate にあるように見えますが、実際にはまだ Date から static parse メソッドを呼び出しています。

あるいは。MyDate クラスに parse メソッドを実装し、その parse メソッドが MyDate クラスを返すようにすることができます。

于 2013-02-11T15:43:37.283 に答える
0

オブジェクトDate(非推奨)のparseメソッドは、Dateオブジェクトではなく、staticlongを返します。多分あなたは代わりに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 に答える