なぜそのようなJava日API(java.util.日.カレンダー)ない。
-
21-09-2019 - |
質問
ほとんどの人が痛感さにより、現在のJava APIの取り扱いカレンダー日(具体的には、授業 java.util.Date
や java.util.Calendar
は恐ろしい散らかっていたとします。
のトップのヘッド:
- 日程は変更可能な
- 日を表すタイムスタンプではなく、日
- が可能です。間の変換を行日付コンポーネント(日月年)、そして日
- カレンダーで無骨ですが、とうという統合するカレンダーシステムを一つのクラス
このポスト に尽きると私は考えているものと JSR-310 もexpainsこれらの課題です。
今の私の質問は
どうしてこれらのクラスでは、Javaす。これらの問題のような明らかな(特に日付が変更可能な問題意識を共有していて容易に避けなければなりません。ようになっています。時間はかる。や問題点を明らかに今から振り返ってみるのみですか?
私はこの厳正なプログラミングの問いが、今後も面白いかAPIのデザインばかりなので間違っています。後に、間違いのない学習機会(と思).
解決
誰かけでしていた以上にやりがい:
- クラス
Date
具体的な瞬間を時間は、ミリ秒 精度。デザインは、このクラスは非常に悪い冗談-ありのままの どのようにも良いプログラマスクリュです。多くの方法 日現在推奨されていませんで置換される方法の授業です。クラス
Calendar
はabstractクラスに変換するとDate
オブジェクトのセットにintegerなどの分野で年、月、日、時間です。クラス
GregorianCalendar
のサブクラスCalendar
を推奨します。その中でもとくに日-to-分野の変換のためのカレンダーのシステム 共通利用します。日免許このoverengineered迷惑からTaligent-a ありのままのどのように平均プログラマスクリュです。
から JavaプログラマーのFAQ, バージョンから07.X.1998年、ピーター-ファン-デル-リンデン-この部分を取り除いた後のバージョンになってる。
と可変性の初期のJDKの授業がでPoint
, Rectangle
, Dimension
,...).誤送の最適化、というのは、聞いたことか言うまでもない。
のとなることに注目していきたい再利用オブジェクト(o.getPosition().x += 5
することにより、作成部o.setPosition(o.getPosition().add(5, 0))
いないimmutables.この場合にも良いとされてい考えを早期にVMsられない現代のVm.
他のヒント
Javaの初期のAPIは自分の時間の積以上のものではありません。不変性は、それだけで後に人気のコンセプト年となりました。あなたはその不変性は「明らか」であると言います。それは今、本当かもしれないが、それはそれからではなかったです。ただ、依存性の注入のようになりました「明白」であるが、それは10年前にはなかった。
これは、カレンダーオブジェクトを作成するために、一度に高価でもありました。
彼らは後方互換性の理由から、そのように残っています。おそらくもっと不幸な間違いが実現した後に、古いクラスは廃止されなかった、新しい日付/時刻のクラスは、今後すべてのAPI用に作成されたことは何でしたさ。これは、ある程度APIのようなJodaTimeのJDK 8採択(java.time
、JSR 310)で発生しているが、実際にそれは遅すぎる少なすぎるのです。
時間は測定することとして取り扱いが容易そのものではありません。ただ、時間について Wikipediaの記事の長さを見てください。そして、時間自体について異なる理解が存在する:(定数など)absoulte時点、特定の場所、時間帯、時間の分解能時点....
私はjava.util.Dateを見たとき、は、私が覚えて、初めて(JDK 1.0は?)私はそれについて、の本当にの幸せでした。私は知っていた言語は、このような機能を持っていませんでした。私は、時間変換などを考える必要はありませんでした。
あなたは(日対XMLGregorianCaldender)を理解する1つのレベルから進化した場合、すべてが葉混乱を変更することので私は、それの混乱を考えると要件(ナノ秒、過去2030年)より高いレベルにはなく、古いそのままを維持します。そして、java.util.Dateは例外ではありません。ただ、I / Oサブシステムまたは...
をスイングするAWTからの移行を見てそして、そのため、「我々は時々リセットボタンを押す必要があります。」 (ところで、それを言った人。?)
次のポスト面白いを見つけるかもしれません。これはかなりCalendarクラスが最初の場所でのJava APIになった方法を説明し、日付クラスの起源にいくつかの光を投げかけています。