文系seの備忘録

Excelの改行でひたすらスペースを打っていた機械音痴の文系seが日々の備忘録を綴る。

ClassCastExceptionとその対策

public class ClassCastException
extends RuntimeException

あるオブジェクトを継承関係にないクラスにキャストしようとしたことを示すためにスローされます。たとえば、次のコードは ClassCastException を生成します。

Object x = new Integer(0);
System.out.println*1;

対策3.互換性のあるキャストを行う
System.out.println*2;

*1:String)x); ClassCastException (Java Platform SE 6) 上記の例は、Object型の変数に入れた数値0を、String型で変換しようとして例外が発生している。 ArrayListジェネリクス機能を使って ArrayList<型> 変数名 = new ArrayList<型>(); というふうに宣言すると、指定された型しかリストの要素にできないが 以下のように宣言すると ArrayList testList = new ArrayList(); Object型として要素が登録されるため 1でも"abc"でも0.1でも入れることができる。 以下は、ArrayListクラスを用いて作成したリストに要素をaddしていき、 それを取り出し表示する処理。 実行すると20行目でエラー。 Exception in thread "main" java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.lang.String at exception.ClassCast.classCast(ClassCast.java:23) at doukaku.DoukakuMain.main(DoukakuMain.java:15) 16行目でint型の123、17行目でString型の"あいうえお"をリストに入れている。 よって、リストの要素は0番目が123,1番目が"あいうえお"となる。 リストの要素は全てObject型。 取り出して表示させる際、型を指定するときに互換性のある型でないとClassCastExceptionがおこる。 例外が発生して処理が終了してしまうのを避けるためには 対策1.try-catchを追加する 対策2.20行目のキャストをなくす System.out.println(testList.get(1

*2:String)testList.get(1