1
我有以下兩種方法用於過濾掉某個集合中某些類的實例中的元素。這第一種方法編譯好,而第二種方法沒有。Java中的WildCard Capture
從第一個方法到第二個方法的唯一更改是在輸出Collection的泛型類型定義中。
我想知道爲什麼第二種方法不編譯,因爲據我所知,它似乎執行安全操作。可以幫助方法有用嗎?如果是的話,它應該如何編碼?
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;
}
請向我們展示編譯器錯誤。 – Turing85