Q:

Why addAll(Collection) is used to put elements in a collection while wildcard extends is generally suggested for Get?

I get the point that “? extends E” means is that it is ok to add all
members of a collection with elements of any type that is a subtype of E. 
Hence for a List , addAll(all values of List) will hold good. 
But then why it is generalised that "Use an extends wildcard when you only get values out of a structure" as per The Get and Put Principle ? 

A:

When you addAll from the parameter Collection, you're "getting" all the elements in the Collection parameter and adding them to another collection. Therefore "Producer Extends (Consumer Super)" still applies here.
By enforcing the generic <? extends E>, we are ensuring that all elements in the parameter are instanceof E, and can therefore be successfully added to a Collection<E>.

