? question mark allows generic method calls with inheritance but it does not allow you to modify the generic list but you can only add Dog (the object in the syntax) and you can use get methods on the collection but you cannot modify the collection so you cannot add any to it other than Dog This is the rule!!

Uses of non-specific type variables are replaced by the upper bound of the type variable.
That is, <? super Dog> is converted to <Dog> during type erasure. So, it does not allow either Animal or Object.
<? super Dog> is converted to <Dog> in the first step.
In the second step, <Dog> is completely removed, because of type erasure.

I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com