APIドキュメントを読んだだけでは理解するのは容易ではないでしょう。
Calendar#getはint値を引数に取り、その引数に対応したフィールド(日時情報の一部を表すもの。年や日、時刻の時など)の値をint値で返すものです。int値を引数に取るので、"0"や"10"と言った整数値を渡すことはできます。
しかし、ただ数値をコード上に書かれると、そのgetメソッドがどのフィールドの値を取得しているのか、読む人にとってはわかりにくいものになります。それだけでなく、コーディングする人からしても、フィールドと数値の対応関係を覚えていないかぎりコーディングしづらいものになります。
返り値も問題で、一律でint値を返します。曜日も整数で返ってくるので、ただの数値では何曜日を表しているのかわかりにくくなります。
このため、Calendarクラスではフィールドの値や曜日の値に名前を付けてstatic定数にしています。こうすることで、コード上でもどのフィールドの値なのかが読みやすくなり、書く際も「このフィールドの値」ということを、実際の値をほとんど気にすることなく書くことができます。
さて、本題に戻りますが、このコード
java
1cal.get(java.util.Calendar.DAY_OF_WEEK) == (java.util.Calendar.SATURDAY)
ここでやっているのは結局、数値比較です。DAY_OF_WEEK
、つまり曜日の値が、SATURDAY
の値と同じかどうかをチェックしていることになります。
しかしCalendarクラスにも問題はあり、intの引数を取るため、Calendarクラスが想定している以外の値も渡すことができてしまうのです。enumというものができる前のクラスなので、引数に渡すものが限定できないクラスだったのです。
Java8になって、新たな日時APIが出来上がって、こちらでは曜日やフィールドをenumで扱っています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/29 00:32