title: Upper bound wildcard in Java Generics
body: <p>after searched for a while I still couldn't find any answer to my question, even there's couple of Generics related topic, so here you go:</p>
  
  <pre><code>ArrayList&lt;? super IOException&gt; list = new ArrayList&lt;Exception&gt;();
  list.add(new FileNotFoundException("this is ok."));
  list.add(new IOException("This is ok"));
  list.add(new ClassCastException("compile err"));//why compile err?
  list.add(new Exception("compile err"));//why compile err? 
  </code></pre>
  
  <p>Why last two line doesn't compile? Especially the last line. I've been doing quite a bit test on this topic but still couldn't catch the logic.</p>
  
  <p>Thanks.</p>