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)
什么是正确的方法?
如果你知道字符串Object里面的所有s HashSet,你可以把它强制转换:
Collection<String> set = (Collection<String>)(Collection<?>)props.keySet();
Run Code Online (Sandbox Code Playgroud)
Java使用擦除来实现泛型,这意味着HashSet本身在运行时不知道它是HashSet<Object>- 它只知道它是a HashSet,并且编译器负责帮助程序员避免做可能产生运行时异常的事情.但是如果你知道你在做什么,编译器就不会阻止你做这个演员.
| 归档时间: |
|
| 查看次数: |
13235 次 |
| 最近记录: |