检测 Object 是不是为 List<String> [重复]

Posted

技术标签:

【中文标题】检测 Object 是不是为 List<String> [重复]【英文标题】:Detect if Object is a List<String> [duplicate]检测 Object 是否为 List<String> [重复] 【发布时间】:2016-10-01 13:21:44 【问题描述】:

我想确定我得到的对象是否是一个字符串列表。 这是我的代码:

Object obj = plugin.getConfig().get("groups");
if(obj instanceof List<?>) // Is the Object a List ?
    List<?> list = (List<?>) obj;
    if(list.get(0) instanceof String) // Does the List contain Strings ?
        List<String> groupList = (List<String>) list;
    

但是 Eclipse 说第 5 行的最后一次转换是不安全的:

类型安全:未经检查的从 List 转换为 List

我该如何解决这个问题?我也试过了

List<String> groupList = (List<String>) obj;

...但我仍然得到同样的错误(基本上)。

【问题讨论】:

这只是一个警告。你的代码不起作用吗? “修复”是什么意思? Eclipse 说它是不安全的,因为它在一般情况下不安全的:想象一个List&lt;Object&gt;,其中第一项是String 【参考方案1】:

底线是,如果要对整个列表进行强制转换,则无法阻止此警告,只能使用注释来抑制它。

请参阅此答案以获得解释(它是关于 Map 而不是 List,但适用相同的原则):How do I address unchecked cast warnings?

如果您想要没有不安全强制转换和没有注释的代码,您可以采用上述问题中接受的答案中的方法:不要强制转换列表本身,而是遍历List&lt;?&gt; 并强制转换每个人ObjectString

【讨论】:

以上是关于检测 Object 是不是为 List<String> [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个List<Map<String,Object>>合并为一个

C# 将Object类转化为List<T>类,其中T的类型不是object类型。

检查 List<Dictionary<string,object>> 中是不是存在 Dictionary<string,object>? [关闭]

如何检查 Flux<Object> 是不是为空?

类型“List<Object?>”不是类型转换中“List<>”类型的子类型

把java两个list <object>集合 放到第三个list<object>集合中去