thingol:
Mas o problema não é o de economizar digitação. São os conceitos que cada vez ficam mais complicados. Se você leu o tal do Tutorial de Generics do Gilad Bracha, em que ele mostra exatamente esse exemplo, vai ver que realmente dá um “nó na cabeça”.
Toda aquela parte de wildcards dá um “nó na cabeça”.
? (unknown) é um tipo desconhecido, mas nós sabemos que qualquer tipo em Java tem que ser no mínimo Object (já que os tipos primitivos não podem ser utilizados em genéricos), então porque em vez de se utilizar “?” não se assume simplesmente que é object (que é o que o compilador termina fazendo de qualquer modo quando não existem limites inferiores ou superiores)?
A sintaxe dos genéricos me ajudou a “limpar” e deixar um bocado de código mais legível, mas algumas coisas na implementação ainda não “caíram” por aqui não.
Coisa bizarra que um dos alunos de um curso que eu dei descobriu:
import org.junit.Test;
public class TestPrint {
@Test
public void testErroGenerico() {
int[] ints = {1,2,3,4,5};
TestPrint.printArray(ints);
}
@Test
public void testCertoGenerico() {
Integer[] ints = {1,2,3,4,5};
TestPrint.printArray(ints);
}
public static <T> void printArray(T... objects ) {
System.out.printf("Array: %s Class: %s%n%n", objects, objects.getClass());
for (T object : objects) {
System.out.printf("Objeto: %s%n", object);
}
System.out.println();
}
}
Executando esse teste do JUnit a saída é a seguinte:
Array: [[I@85af80 Class: class [[I
Objeto: [I@c51355
Array: [Ljava.lang.Integer;@15fea60 Class: class [Ljava.lang.Integer;
Objeto: 1
Objeto: 2
Objeto: 3
Objeto: 4
Objeto: 5
Na execução do primeiro método, onde ele tem que fazer o autoboxing com vararg genérico ele “cria uma classe” do tipo “I” e coloca em uma referência a um array de array de “I” (por isso que imprime “[[” antes do “I”).
Já na segunda chamada, onde ele não precisa mais fazer autoboxing, as cosas funcionam normalmente.
Talvez seja também por que quando você passa um array direto pro vararg o compilador acha que já é o “array do vararg” e termina se perdendo, aí juntou com autoboxing e genéricos e pronto, lascou tudo 
É claro que é uma besteira, mas alguém pode terminar caindo nesse bug aí e ficar sem saber o que está acontecendo. Acho que já tá bom de ficar “apertando e puxando” o pobre do Javac e o bytecode da JVM.