Earlier quoted context omitted.
I have a feeling you're going to get a bunch of type theorists instead of programmers who get things done if you ask about Java's syntax for use-site contravariance.
Not true. You'll get, for instance, people who read Effective Java [1], by Joshua Bloch (who is, IMHO, THE man when it comes to java), and remembered the PECS mnemonics. PECS stands for producer-extends, consumer-super. So, to cite the textbook example, say you are implementing a Stack . It will probably have the methods: public void push(E element); public E pop(); and, for convenience: public void pushAll(Iterable…
I think the mistake the Java designers made here was going with use-site variance instead of definition-site variance.