2014-07-26 77 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