我有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;
}
什么是正确的方法?
答案 0 :(得分:8)
如果你知道Object
中的所有HashSet
都是字符串,你可以直接投射它:
Collection<String> set = (Collection<String>)(Collection<?>)props.keySet();
Java使用擦除实现泛型,这意味着HashSet本身在运行时不知道它是HashSet<Object>
- 它只知道它是HashSet
,并且编译器负责帮助程序员避免做可能产生运行时异常的事情。但是如果你知道你在做什么,编译器就不会阻止你做这个演员。