Eu não entendi muito bem a diferença dos códigos abaixo:
1.
List<Number> lista = new ArrayList();
2.
List<Number> lista = new ArrayList<>();
3.
List<Number> lista = new ArrayList<Number>();
Tendo em vista que nos 3 casos o código compila e executa normalmente (somente no primeiro caso, que fica com warning mas roda normal mesmo assim), qual seria a melhor forma de se fazer no dia a dia?
Eu optaria sempre pela terceira opção, deixando explicito para qualquer outro desevolvedor que o ArrayList é um Number. Mas isso é realmente necessário? Se nesse caso acima não é necessário, em qual caso seria importante deixar o generics explicito nos dois lados?