将Set <Object>转换为Collection <String>

Mig*_*ork 8 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;
}
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法?

Str*_*ior 8

如果你知道字符串Object里面的所有s HashSet,你可以把它强制转换:

Collection<String> set = (Collection<String>)(Collection<?>)props.keySet();
Run Code Online (Sandbox Code Playgroud)

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