2014-07-26 16 views
6

Ich habe eine Set<Object>.Convert Set <Object> zu Collection <String>

Ich brauche eine Collection<String> von ihm.

Ich kann eine for-Schleife machen, um alle Objekte hinzuzufügen und zu werfen, aber das ist hässlich und wahrscheinlich auch langsam.

@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; 
} 

Was ist der richtige Weg?

+0

Welche Java-Version verwenden Sie? –

+1

Wie werden Sie von "Object" zu "String" konvertieren? Müssen Sie 'toString()' bei jedem aufrufen? Oder haben Sie a priori das Wissen, dass die Objekte 'String' sind? –

+0

Ja, ich weiß, dass sie Strings sind. Überprüfen Sie die Frage aktualisiert, jetzt ist es klarer. Und @LuiggiMendoza ist es Java 7. – MightyPork

Antwort

6

Wenn Sie wissen, dass alle Object s innerhalb der HashSet Strings sind, können Sie einfach es Stimmen:

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

Java implementiert Generika mit Löschung, was bedeutet, dass die HashSet selbst nicht zur Laufzeit nicht wissen, dass es a HashSet<Object> - es weiß nur, es ist ein HashSet, und der Compiler ist dafür verantwortlich, Programmierern zu helfen, Dinge zu vermeiden, die Laufzeitausnahmen erzeugen würden. Aber wenn Sie wissen, was Sie tun, wird der Compiler Sie nicht davon abhalten, diese Besetzung zu tun.

+0

Sorry, ich war nicht klar genug. Überprüfen Sie, ob die Antwort für das, was ich wirklich tue, immer noch gültig ist. – MightyPork

+0

@MightyPork: Ja, die Antwort ist immer noch gültig. Da Sie für die Konvertierung keine spezifischen Schritte ausführen müssen (Sie können nur "Objekt" in "String" umwandeln), können Sie das gleiche Ziel erreichen, indem Sie die Sammlung selbst generieren. – StriplingWarrior

+0

Nicht gut, ich versuchte 'return (Set ) props.keySet();' aber es sagte, ich 'Kann nicht von Set Set '. – MightyPork

Verwandte Themen