Lendo a conclusão, fiquei com uma dúvida nessa parte:
Vimos uma variação dos generics, onde omitimos o tipo, e o código continua funcionando:
List lista = new ArrayList<>();
lista.add(5); lista.add(12);
System.out.println("Tamanho: " + lista.size());
Não seria errado dizer que omitiu o tipo? Pois quando ele "definiu" a lista (List lista) ele disse que é uma lista de Integer, apenas quando ele criou a lista em si ele omitiu (new ArrayList<>();) nesse caso ele já não aceitaria apenas Integer nessa lista?