型の安全性: 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メソッドのようなメソッドは共通クラスや親クラスに書いた方が良いです。
オブジェクトをListに変換する例です。
public <T> List<T> castToList(Object target) { return objectMapper.convertValue(target, new TypeReference<List<T>>() {}); }
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント