Каковы преимущества контравариантности в JAVA

Я хотел бы спросить, каковы преимущества использования контравариантности в JAVA?

Предположим, что у нас есть два метода:

public static <T> void f1(List<? super T> list, T item){     
        list.add(item);     
    }

public static <T> void f2(List<T> list, T item){     
        list.add(item);     
    }

и я называю их в основном:

public static main(){     
        f1(new ArrayList<Shape>(), new Cube());
        f2(new ArrayList<Shape>(), new Cube());     
    }

Чем отличается? Контравариантность кажется еще хуже, потому что мы можем только «получить» тип объекта, так почему и когда мы должны его использовать?


person Iza Marek    schedule 21.08.2013    source источник
comment
Впервые услышал этот термин - контравариантность. Что ты имеешь в виду?   -  person Rohit Jain    schedule 21.08.2013
comment
@RohitJain: см. это.   -  person MD Sayem Ahmed    schedule 21.08.2013