Object转List

转自https://blog.csdn.net/ptsx0607/article/details/100107492

 

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
}


Main主函数中的 Object obj模拟了List对象。后续的代码首先判断obj是否是List类型,然后使用Class.cast做类型转换

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

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);
}


 
 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Object对象换为List对象,可以使用以下方法: ``` public static <T> List<T> castList(Object obj, Class<T> clazz) { if (obj instanceof List) { return (List<T>) obj; } else { return Collections.singletonList(clazz.cast(obj)); } } ``` 这个方法接受两个参数,一个是obj,即是我们需要换的Object对象,另一个是List中元素的class类型。首先,我们判断obj是否是List类型,如果是的话直接返回换后的List对象。如果不是List类型,则使用Class.cast方法将obj换为clazz类型,并使用Collections.singletonList方法将其封装为单个元素的List对象。通过这个方法,就可以将Object对象成功换为List对象。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [如何优雅的将Object换成List](https://blog.csdn.net/VioletHan7/article/details/103715005)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Objectlist,jsonObjectlist方法,亲测可用](https://blog.csdn.net/httpmc2018/article/details/122897742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值