Генерики, наследование
От: Petrovich_Alex  
Дата: 15.05.07 18:17
Оценка:
собстенно, почему есть ошибка в строке
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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.