ClassCastException
互換性のない型へのキャスト時に発生するJavaの実行時例外
概要
ClassCastExceptionは、オブジェクトを互換性のない型にキャストしようとした場合に発生するJavaの実行時例外です。コンパイル時には検出されず、実行時に発生するため注意が必要です。
エラーメッセージ
Exception in thread "main" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Integer
at com.example.MyClass.main(MyClass.java:8)
原因
- 不正なダウンキャスト: 親クラスの参照を、実際のオブジェクト型と異なるサブクラスにキャストしている
- ジェネリクスの型消去: raw型を使用した際に、実行時に型の不一致が発生する
- ClassLoaderの違い: 異なるClassLoaderでロードされた同名のクラス間でキャストを試みている
- コレクションの型不一致: raw型のコレクションに異なる型のオブジェクトが混在している
解決策
1. instanceofで型チェックを行う
キャスト前にinstanceofで型を確認する。
| |
2. Java 16以降のパターンマッチングを使う
instanceofとキャストを一度に行える。
| |
3. ジェネリクスを正しく使用する
raw型を避け、型パラメータを明示する。
| |
4. ClassLoader問題の診断
異なるClassLoaderで同一クラスをロードした場合の対処。
| |
関連エラー
- NullPointerException - null参照アクセスで発生
- ClassNotFoundException - クラスが見つからない場合に発生
Java の他のエラー
この記事は役に立ちましたか?