Na verdade, o meu desagrado com Java é que ela não é uma linguagem tipada... sério... e também não é uma linguagem não-tipada... ela tem o pior dos dois lados e nenhuma das vantagens... O que ocorre com Java é que as referências contém as definições de tipos dos objetos que apontam... quando um objeto está dentro de uma sequência qualquer ele não tem tipo porque todos as referências em uma sequência são Object... você precisar fazer um typecast quando retira o objeto da coleção... e na maioria dos programas, menos de 10% dos objetos vão ser estáticos, em variáveis com tipo declarado... a maioria vai estar em coleções, tendo seu tipo checado durante a execução... Quer dizer, com Java, na maior parte do tempo, você tem o problema de uma linguagem não tipada (tipos sendo verificados durante a execução, atrasando a detecção de bugs) e de uma linguagem tipada (mais código) sem nenhuma das vantagens...