将Object转换成List<?>,避免Unchecked cast: 'java.lang.Object' to 'java.util.List<java.lang.String>'

java中如果需要将一个object转成list,大部分人会直接使用强制类型转换:(List<String>) obj这样。这样强制转换编译会提示Unchecked cast: ‘java.lang.Object‘ to ‘java.util.List<java.lang.String>‘,编译器的意思该强制类型转换并未做类型校验,强制转换并不安全,可能会抛出异常导致程序崩溃。在很多博客中有人会建议用@SuppressWarnings("unchecked")解决编译器警告,这种方法是极为不妥的,因为它只是用来告诉编译器忽略警告,而警告却实实在在的存在。

正确的做法:

public static Object getObj() {
    List<String> list = new ArrayList<>();
    list.add("1");
    list.add("ab");
    return list;
}
public static void main(String[] args) {
    Object obj = getObj();
    List<String> result = new ArrayList<>();
    if (obj instanceof ArrayList<?>) {
        for (Object o : (List<?>) obj) {
            result.add(String.class.cast(o));
        }
    }
    result.forEach(System.out::println); // 输出:1 ab
}

如果你想使用更方便的方法,可以直接调用下面的函数。

public static <T> List<T> castList(Object obj, Class<T> clazz)
{
    List<T> result = new ArrayList<T>();
    if(obj instanceof List<?>)
    {
        for (Object o : (List<?>) obj)
        {
            result.add(clazz.cast(o));
        }
        return result;
    }
    return null;
}

它接受两个参数,一个是obj,即是我们需要转换的List对象,然后传入List中元素的class即可。
使用方法如下:

public static void main(String[] args) {
    Object obj = getObj();
    List<String> list = castList(obj, String.class);
    list.forEach(System.out::println);
}

  

将Object转换成List<?>,避免Unchecked cast: 'java.lang.Object' to 'java.util.List<java.lang.String>'

原文地址:https://www.cnblogs.com/xingmangdieyi110/p/11676553.html

时间: 2024-10-25 02:01:35

将Object转换成List<?>,避免Unchecked cast: 'java.lang.Object' to 'java.util.List<java.lang.String>'的相关文章

List&lt;Object&gt;转换成Map&lt;String,Object&gt;形式

上一篇讲到了将List<Map<String,Object>> 转换为 List<javaBean>,这次反过来: /** * 用于把List<Object>转换成Map<String,Object>形式,便于存入缓存 * @author zhang_bo * @param keyName 主键属性 * @param list 集合 * @return 返回对象 */ private <T> Map<String, T>

java中Object转换成int或String类型方法

转载: http://www.cnblogs.com/1020182600HENG/p/6137206.html Object obj = getObject(); if(obj instanceof Integer) int value = (Integer)obj; 1 String转换为int类型的方法: 1. Integer.parseInt([String]) 2.Integer.valueOf([String]).intValue(); 3.Integer.decode([Strin

将Object转换成Dictionary方法

如果Object是Dictionary类型,直接返回 如果Object是NameValueCollection类型,则添加到Dictionary里 如果Object是Hashtable类型,添加到Dictionary里 ...其他键值类型请自己完善 如果Object非上述类型,则用IL语言将其转换成Dictionary类型, 具体代码如下: public static Dictionary<string, object> ConvertFromObject(object obj) { if (

[Java类型转换] Object 转换成 String 的三种方法

方法一:Object.toString() obj.toString() 注意:必须保证Object不是null值,否则将抛出NullPointerException异常. 方法二:(String)Object Object o = new Integer(100); String string = (String)o; 注意:需要转换的类型必须是能够转换为String的,否则会出现CalssCastException异常错误. 方法三:String.valueOf(Object) 在使用Str

C#如何把List of Object转换成List of T具体类型

上周码程序的时候碰到个问题,因为设计上的约束,一个方法接受的参数只能为List<object>类型,然而该方法需要处理的真实数据则是确定的List<Currency>.然而C#不允许显示的直接转换类型,并且两个方向上都不可以操作.这个问题让我爆了一会儿,最后在MSDN上找到了一个OfType<T>的拓展方法可以完成这件事. Enumerable.OfType<TResult> 方法: 此方法通过使用延迟执行实现. 即时返回值为一个对象,该对象存储执行操作所需

Ilist&lt;object&gt;转换成I&lt;实体&gt; 如何转换

ml = objects.Cast<menu>().ToList(); //需要 using System.Linq;

Map中object转换成boolean类型

Ajax请求查询数据之后,返回的是map类型, resultMap.put("flag", flag); 在接收到数据之后判断时,转换出现异常,导致页面点击按钮之后,页面没有反应,http请求报404异常,一个风马牛不相及的请求响应.后台也没有报错. 检查后台代码发现,处理判断时出现异常, resultMap.get("flag") != null && ((String)resultMap.get("flag")).equals

调用短信接口,先var_dump()看数据类型是object需要json_decode(json_encode( $resp),true)转换成array

返回的数据.先看类型,如果是object类型 先json_encode, 再json_decode,加true 转换成数组 $resp = $c->execute($req); var_dump($resp); object(stdClass)#12 (2) { ["result"]=> object(stdClass)#13 (3) { ["err_code"]=> string(1) "0" ["model&quo

什么是LambdaExpression,如何转换成Func或Action(2)

序言 在上一篇中,我们认识了什么是表达式树.什么是委托,以及它们的关系.可能是我功力不好,貌似大家都不怎么关注,没有讲解出不同角度的问题. 学习一种新技术,是枯燥的过程,只有在你掌握后并能运用时才能从它身上得到乐趣. 做程序开发是一群很奇怪的人群,我们居然可以通过密密麻麻的英文字符加上标点符号从中找到乐趣,确实很奇怪. 考虑到大家接触新技术需要一个过程: 其实对于很多人来说已经不是新技术了,不过您会耐心看本篇后续的文章,说明您可能对这一项技术运用的并不是很熟练 所以我不打算一上来,就放一大堆代码