将Set <object>转换为Collection <string> </string> </object>

时间:2014-07-26 17:25:34

标签: java collections casting

我有Set<Object>

我需要从中获得Collection<String>

我可以考虑制作一个for循环来添加和转换所有的对象,但这很难看,也可能很慢。

@Override
public Collection<String> keys()
{
    // props is based on HashMap
    Set<String> keys = new HashSet<>();
    for (Object o : props.keySet()) {
        keys.add((String) o);
    }
    return keys;
}

什么是正确的方法?

1 个答案:

答案 0 :(得分:8)

如果你知道Object中的所有HashSet都是字符串,你可以直接投射它:

Collection<String> set = (Collection<String>)(Collection<?>)props.keySet();

Java使用擦除实现泛型,这意味着HashSet本身在运行时不知道它是HashSet<Object> - 它只知道它是HashSet,并且编译器负责帮助程序员避免做可能产生运行时异常的事情。但是如果你知道你在做什么,编译器就不会阻止你做这个演员。

相关问题