Java 发生Unchecked cast警告

参考以下博文:https://my.oschina.net/u/4410452/blog/3371783

在尝试讲序列化的对象读取到内存时,以下强转类型代码

this.booklist = (ArrayList) ois.readObject();

发生了该警告提醒

Unchecked cast: 'java.lang.Object' to 'java.util.ArrayList' 
编译器提示这种强制转换并未做类型检验,强制转换并不安全,可能会抛出异常导致程序崩溃。
参考过其他博客,有些建议使用
@SuppressWarnings("unchecked")

  来解决编译器警告,但并不安全,这种做法只是让编译器忽略该警告。

以下方法可以是根据我自己的ArrayList调整的,需要根据自己的类调整

    /**
     * 防止强转出现警告
     * @param obj   强转对象
     * @param clazz 强转类型内含类型
     * @param    泛型
     * @return
     */
    public static  ArrayList castList(Object obj, Class clazz)
    {
        ArrayList result = new ArrayList();
        if(obj instanceof ArrayList)
        {
            for (Object o : (ArrayList) obj)
            {
                result.add(clazz.cast(o));
            }
            return result;
        }
        return null;
    }
}

该方法接受两个参数,一个是obj,即需要强转的对象,clazz表示内嵌类型的.class参数

使用方法如下

try(FileInputStream fis = new FileInputStream("book.txt")){
            ObjectInputStream ois = new ObjectInputStream(fis);
            //  防止出现强制转换警告Unchecked cast
            this.booklist = castList(ois.readObject(), Book.class);
        } catch (IOException | ClassNotFoundException e) {

        }

另外需要强转map类型时,使用方法也有所不同

/**
     * 防止出现强转警告
     * @param obj   强转对象
     * @param clazz1    HashMap的key
     * @param clazz2    value
     * @param    Key泛型
     * @param    Value泛型
     * @return
     */
    public static  HashMap castHashMap(Object obj, Class clazz1, Class clazz2)
    {
        HashMap result = new HashMap();
        if(obj instanceof HashMap)
        {
            for (Object o : ((HashMap) obj).keySet()) {
                result.put(clazz1.cast(o),clazz2.cast(((HashMap) obj).get(o)));
            }
            return result;
        }
        return null;
    }

使用实例

try (FileInputStream fis = new FileInputStream("ExpressDao.txt")){
            ObjectInputStream ois = new ObjectInputStream(fis);
            //  防止出现强转警告
            this.data = castHashMap(ois.readObject(), Integer.class, Express.class);
        } catch (IOException | ClassNotFoundException e) {

        }

 

你可能感兴趣的:(Java 发生Unchecked cast警告)