型の安全性: Object から ~ への未検査キャスト

Java5.0より、警告で「型の安全性: Object から ~ への未検査キャスト」という警告が出るようになりました。

「~」には具体的な総称型が入ります。

例えば、「Map<String,String>」などです。

このエラーを簡単に回避するにはメソッドの上に

@SuppressWarnings("unchecked")

アノテーションを追記します。

以下、例です。

package com.confrage;

import java.util.HashMap;
import java.util.Map;

public class TestMain {
	/**
	 * @param args
	 */
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		Object obj = new Object();
	    Map<String, String> map = new HashMap<String, String>();
	    map = (Map<String, String>) obj;
	}
}

総称型(ジェネリクス)とは

List<String>やMap<String,String>などの型を言います。

警告の対処方法

このページを参考に(と言うか丸々コピーですが)、一つのautoCastメソッドに対してのみ

@SuppressWarnings(“unchecked”)を付加し、以下のようにObjectクラスを返すメソッドなどに対してラップしてコーディングします。

package co.confrage;

import java.util.HashMap;
import java.util.Map;

public class TestMain {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Object obj = new Object();
	    Map<String, String> map = new HashMap<String, String>();
	    map = autoCast(obj);// ラップする
	}
	@SuppressWarnings("unchecked")
	public static <T> T autoCast(Object obj) {
	    T castObj = (T) obj;
	    return castObj;
	}
}

上記はサンプルですが、autoCastメソッドのようなメソッドは共通クラスに書いた方が良いです。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA