2014-07-26 53 views
6

我有一个Set<Object>转换集<Object>收集<String>

我需要从它得到一个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

您使用的是哪个版本的Java? –

+1

你打算如何将'Object'转换为'String'?你需要每个调用'toString()'吗?或者你有一些先验知识,即对象是“String”? –

+0

是的,我知道他们是弦乐队。检查更新的问题,现在更清楚。而@LuiggiMendoza是Java 7. – MightyPork

回答

6

如果你知道所有的Object S中的HashSet内是字符串,你可以将它转换:

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

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

+0

对不起,我还不够清楚。检查答案是否对我真正在做的事情仍然有效。 – MightyPork

+0

@MightyPork:是的,答案仍然有效。由于您不必为转换做任何特定的步骤(您只需将'Object's转换为'String's),就可以通过投射集合本身来达到相同的目的。 – StriplingWarrior

+0

不行,我试过'回来(设置)props.keySet();'但是说我'不能从集合投到设置'。 – MightyPork