2016-06-30 17 views
0

オブジェクトコレクションの一般的な型指定されたサブコレクションを返すヘルパーメソッドを記述したいと思いますが、私はそれに助けが必要です!ここでコレクションの汎用型サブコレクション

私はそれをやってみたい方法です:

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

明白な問題は、一般的なタイプは、実行時に消えてしまうということですが、あなたは私が何をしようとしていますどのようなアイデアを得ます。

誰もこのようなものを実装する方法を知っていますか?

答えて

1

あなたはそれと一緒にTのクラスを渡すとClass::isAssignableFromを使用しなければならないでしょう:

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

理由だけではなく、 'clazz.isInstance(オブジェクト)'使わないのでしょうか? –

+1

@LouisWassermanそれはサブタイプを除外することになるので、私は彼らも望んでいると思った。 –

+0

はいサブクラスが必要です。このメソッドを渡す一般的な型(とクラス)は、インターフェイス(ほとんどの場合)です。 –

関連する問題