回答編集履歴

1

発生原因を追ってみた

2016/07/30 16:28

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -1,3 +1,11 @@
1
1
  dayは入力された**String**ですよね?formatの必要は無いのでは?
2
2
 
3
- Format#formatメソッドはObject型を受け取ることができるようにはなってますが、文字列化できないものを受け取った場合はこのような例外を発します。
3
+
4
+
5
+ ```java
6
+
7
+ String v = d.format(day);
8
+
9
+ ```
10
+
11
+ ここでDateFormatのformatメソッドに渡しているつもりなのでしょうが、引数がDateではなくStringのため、その親クラスFormatのメソッドで、Stringも受け取れる[Format#formatメソッド](https://docs.oracle.com/javase/jp/8/docs/api/java/text/Format.html#format-java.lang.Object-)が起動します。このメソッド経由で、[Format#format(Object, StringBuffer, FieldPosition)メソッド](https://docs.oracle.com/javase/jp/8/docs/api/java/text/Format.html#format-java.lang.Object-java.lang.StringBuffer-java.text.FieldPosition-)が起動します。これは[DateFormatクラスでオーバーライドされており](https://docs.oracle.com/javase/jp/8/docs/api/java/text/DateFormat.html#format-java.lang.Object-java.lang.StringBuffer-java.text.FieldPosition-)、第1引数のObjectが**DateかNumberでなければ例外**(ここで発生しているIllegalArgumentException)を発生します。今回の場合はStringを渡しているため、この例外が発生しているのです。