<p>I have a couple of questions about generic wildcards in Java:</p>

<ol>
<li><p>What is the difference between <code>List&lt;? extends T&gt;</code> and <code>List&lt;? super T&gt;</code>?</p></li>
<li><p>What is a bounded wildcard and what is an unbounded wildcard?</p></li>
</ol>

In your first question,
```
<? extends T>
```
and
```
<? super T>
```
are examples of bounded wildcards.  An unbounded wildcard looks like
```
<?>
```
, and basically means
```
<? extends Object>
```
.  It loosely means the generic can be any type.  A bounded wildcard (
```
<? extends T>
```
or
```
<? super T>
```
) places a restriction on the type by saying that it either has to
extend
a specific type (
```
<? extends T>
```
is known as an upper bound), or has to be an ancestor of a specific type (
```
<? super T>
```
is known as a lower bound).
The Java Tutorials have some pretty good explanations of generics in the articles
Wildcards
and
More Fun with Wildcards
.