собстенно, почему есть ошибка в строке
clean(list, newFilter());
и что можно сделать что бы не писать самому ТИП как в
clean(list, new MyFilter<B>());
код:
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
public class Sample {
public static void main(String[] args) {
List<B> list = new ArrayList<B>();
clean(list, new MyFilter<B>());
//error{
// <T>clean(java.lang.Iterable<T>,Filter<T>) in Main cannot be applied to
// (java.util.List<B>, Filter<A>)
clean(list, newFilter());
//}
}
private static <T extends A> Filter<T> newFilter() {
return new MyFilter<T>();
}
private static <T extends A> void clean(Iterable<T> iterable, Filter<T> filter) {
for (Iterator<T> iterator = iterable.iterator(); iterator.hasNext();) {
T t = iterator.next();
if (filter.accept(t))
System.out.println(t);
}
}
}
interface A {
boolean isA();
}
class B implements A {
public boolean isA() {
return false;
}
}
interface Filter<T> {
boolean accept(T t);
}
class MyFilter<T extends A> implements Filter<T> {
public boolean accept(T t) {
return t.isA();
}
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>