&lt?&gt uso do coringa duvida

ae pessoal, fiquei na duvida pq usar o coringa, se qdo usa-lo nao posso adicionar nada a minha lista… entao pra q usar?

import java.util.*;
class Cor{}
class Azul extends Cor{}

class NoCoring{
	public void cham(List<? extends Cor> cor){
		//cor.add(new Azul());
	}
	public static void main(String agrs[]){
		NoCoring nc = new NoCoring();
			List<Cor> li = new ArrayList<Cor>();
				nc.cham(li);
	}
}

nesse codigo ai qual a essencia de usar a notacao <?> ja que nao posso adiciona nada ao meu conjunto? na explicacao da kahty nao vi o objetivo de usar o <?> mudei, veja o mesmo codigo so que mudei apenas a minha lista:

import java.util.*;
class Cor{}
class Azul extends Cor{}

class NoCoring{
	public void cham(List<? extends Cor> cor){
		//cor.add(new Azul());
	}
	public static void main(String agrs[]){
		NoCoring nc = new NoCoring();
			List<Azul> li = new ArrayList<Azul>();
				nc.cham(li);
	}
}

nessa aqui entendi que posso passar para meu metodo qualquer coisa extends a Cor ai passei Azul, mais mesmo assim nao posso adicionar ao conjunto… nao conseguir entender essa parte do estudos sobre genericos…
:cry: