Considerando “elemento” (E) como sendo o tipo de objeto a ser armazenado na Collection, poderíaos fazer:
import java.util.*;
class A {}
class B {
public static void main(String[] args) {
Set<A> s = new TreeSet<A>();
s.add(new A());
s.add(new A());
}
}
E receber um java.lang.ClassCastException na segunda chamada ao método add().
A declaração de TreeSet não poderia ser?:
public TreeSet<E extends Comparable> { ... }
De modo que só pudéssemos criar conjuntos classificados (sorted, como TreeSet ou TreeMap) de classes que passassem no teste “é-um” Comparable? Fazendo com que o erro fosse um em tempo de compilação e não de execução? Isso traria algum efeito colateral que eu não percebo?
Daí quando fosse chamado o construtor sobrecarregado de TreeSet que usa um Comparator como argumento, ele daria preferência à classificar de acordo com o Comparator.
Valeu galera!
buiutripa