public class Main {
public static void main(String[] args) {
// インスタンスの実際の型が不明なオブジェクト
Object unknownObject = getUnknownObject();
// null チェックを行ってからインスタンスが特定の型であるかを確認してからダウンキャスト
if (unknownObject != null) {
if (unknownObject instanceof SpecificType) {
SpecificType specificInstance = (SpecificType) unknownObject;
// ダウンキャスト後の処理
specificInstance.doSomething();
} else {
System.out.println("The object is not of the expected type");
}
} else {
System.out.println("The object is null");
}
}
// 仮のメソッド:実際のアプリケーションでは適切な方法でオブジェクトを取得
private static Object getUnknownObject() {
// ここでは単に SpecificType クラスの新しいインスタンスを返す例
return new SpecificType();
// または null を返すこともあります
// return null;
}
}
// 仮のクラス:実際のアプリケーションでは適切な型を使用
class SpecificType {
void doSomething() {
System.out.println("Doing something specific");
}
}
この例では、unknownObject
というオブジェクトが特定の型であるかどうかを instanceof
演算子を使用して確認してから、安全にダウンキャストしています。また、null
チェックも行い、NullPointerException
を回避しています。これにより、プログラムが安全に実行されるようになります。
NullPointerException の回避
NullPointerException(以下、NPE)(別名”ヌルポ”)は、Javaプログラムでよく見られる例外の一つで、特にオブジェクトの参照がnullであるときに発生します。これを回避するためには、適切なnullチェックが必要です。
前述のコード例では、次のようにNPEを回避しています:
// null チェックを行ってからインスタンスが特定の型であるかを確認してからダウンキャスト
if (unknownObject != null) {
if (unknownObject instanceof SpecificType) {
SpecificType specificInstance = (SpecificType) unknownObject;
// ダウンキャスト後の処理
specificInstance.doSomething();
} else {
System.out.println("The object is not of the expected type");
}
} else {
System.out.println("The object is null");
}
この部分がnullチェックのコードです:
if (unknownObject != null) {
// ...
} else {
System.out.println("The object is null");
}
この部分は、unknownObject
がnullでない場合に、その後のコードを実行するようにしています。nullである場合には、The object is null
と表示しています。このようなチェックを行うことで、unknownObject
がnullである場合にNPEを回避できます。
NPEはプログラムの実行時に発生する例外であり、オブジェクトがnullである状態でメソッドやフィールドにアクセスしようとすると発生します。そのため、オブジェクトがnullでないことを確認してから操作を行うことが、NPEを回避する重要な手法です。