I have been confused by Java wildcard and template for a very long time, because I assume what inhertance can do any thing wildcard can.
But actually, they are thoroughly distinctive thing:
Template make it possible to use a uniform type name to represent various kinds of type, rather than do repeating work in coding for different kind of type.
Template can be dynamically create, once template type is declared, developer can not dynamically change it.
But wildcard should be determined in run time.
Our Java code can be shorten with assistance of wildcard.