2016-06-30 7 views
0

Ich möchte eine Hilfsmethode schreiben, die eine generisch typisierte Untersammlung einer Objektsammlung zurückgeben würde, aber ich brauche etwas Hilfe damit!Generische typisierte Untersammlung einer Sammlung

Hier ist, wie ich will, es zu tun:

public static <T> Collection<T> getTypeFilteredSubCollection(Collection<Object> objects) { 
    Collection<T> typeFilteredCollection = new ArrayList<T>(); 
    for(Object object : objects) { 
     if(object instanceof T) { 
      typeFilteredCollection.add((T)object); 
     } 
    } 
    return typeFilteredCollection; 
} 

Das offensichtliche Problem ist, dass generische Typen Laufzeit verschwinden, aber Sie bekommen die Idee, was ich zu tun versuche.

Hat jemand eine Idee, wie man so etwas implementiert?

Antwort

1

Sie würden die Klasse von T zusammen mit ihm passieren müssen und Class::isAssignableFrom verwenden:

public static <T> Collection<T> getTypeFilteredSubCollection(Collection<Object> objects, Class<T> clazz) { 
    Collection<T> typeFilteredCollection = new ArrayList<T>(); 
    for(Object object : objects) { 
     if(clazz.isInstance(object)) { 
      typeFilteredCollection.add((T)object); 
     } 
    } 
    return typeFilteredCollection; 
} 
+1

Warum nicht einfach verwenden 'clazz.isInstance (Objekt)'? –

+1

@LouisWasserman Das würde Subtypen ausschließen, ich nahm an, dass sie auch gesucht werden würden. –

+0

Ja Unterklassen sind notwendig. Der generische Typ (und die Klasse), der ich diese Methode übergeben möchte, wäre eine Schnittstelle (die meisten Fälle). –