2016-09-19 7 views
-1

を私はこのようなクラスを持っている:Javaはカスタムクラスの拡張日にダウンキャスト - ランタイムエラー

public class DateS extends Date { 
    public DateS yesterday(){ 
     Calendar cal = Calendar.getInstance(); 
     cal.setTime(this); 
     cal.add(Calendar.DAY_OF_YEAR, -1); 
     return (DateS) cal.getTime(); 
    } 
} 

それがうまく構築することができます。実行時にdate.yesterday()と呼ぶと、Cannot cast 'java.util.Date' to 'myproject.package.DateS'がスローされます。

私はこれを修正するためになぜ、どうすればよいかを知る必要があります。

+0

まあ、 'Calendar.getTime()'は 'myproject.package.DateS'のインスタンスを返さないので、そのキャストはできません。これを修正するには、 'DateS'ではなく' Date'を返すだけです。 –

+0

Swiftでは、クラスの拡張を作成するときに、そのクラスに機能を追加できます。 Javaと同等のものは何ですか? Dateクラスに新しい属性とメソッドを直接追加するにはどうすればよいですか? –

+2

@ JorgeHenrique javaと同等のものはありません。おそらく返された 'Date'を' DateS'クラスにラップする必要があります。委任したり、追加の機能を追加することができます。 –

答えて

3

CalendarDateSを作成していないため、Dateという異なる実装を使用しています。

DateSにキャストするには、オブジェクトはDateSのインスタンスまたはそのクラスの子でなければなりません。 CalendarDateSのインスタンスを返さないため、キャストすることはできません。理論的には、返された日付が正しい型であり、コンパイラが理解できない場合には正常に動作するため、コンパイルはうまくいきます。

関連する問題