Ich habe die folgenden zwei Methoden, um Elemente innerhalb einer Auflistung herauszufiltern, die Instanzen einer Klasse sind. Diese erste Methode kompiliert OK, während die zweite nicht.WildCard Capture in Java
Die einzige Änderung von der ersten zur zweiten Methode liegt in der generischen Typdefinition der Ausgabesammlung.
Ich würde gerne wissen, warum die zweite Methode nicht kompiliert, da, soweit ich weiß, scheint es eine sichere Operation durchzuführen. Kann eine Hilfsmethode nützlich sein? Wenn ja, wie soll sie codiert werden ?.
public static <T> Collection<T> firstFilterCollection(Collection<?> sourceCollection, Class<T> classToFilter) throws InstantiationException, IllegalAccessException {
Collection<T> destinationCollection = sourceCollection.getClass().newInstance();
for (Object object : sourceCollection) {
if (classToFilter.isInstance(object)) {
T t = classToFilter.cast(object);
boolean add = destinationCollection.add(t);
}
}
return destinationCollection;
}
public static <T> Collection<? extends T> secondFilterCollection(Collection<?> sourceCollection, Class<T> classToFilter) throws InstantiationException, IllegalAccessException {
Collection<? extends T> destinationCollection = sourceCollection.getClass().newInstance();
for (Object object : sourceCollection) {
if (classToFilter.isInstance(object)) {
T t = classToFilter.cast(object);
boolean add = destinationCollection.add(t);
}
}
return destinationCollection;
}
Bitte zeigen Sie uns den Compilerfehler. – Turing85