A questão de saber se o C # ou o Java está à frente do outro está em debate, mas, em vez de focar nos recursos da linguagem de um ou de outro, prefiro focar no que está envolvido na evolução de uma linguagem. Esse é um fato que eu acho que ninguém discutirá: Java é mais antigo que C #.
Problemas na alteração de como um idioma funciona:
- Se você quebra a compatibilidade com versões anteriores, irrita muitos desenvolvedores
- Se você irritar seus desenvolvedores, eles passam para outro idioma que os suporta melhor. Portanto, não há razão para continuar trabalhando com o idioma.
- O Java tomou algumas decisões de design desde o início com uma pressão para colocar o idioma no mercado. A esperança era voltar e preencher alguns dos espaços em branco. Essas decisões ainda atormentam a linguagem porque os mantenedores não querem violar o primeiro ponto.
- O Java explorou muitos novos territórios e provou de uma vez por todas que uma linguagem de coleta de lixo pode ser levada a sério - e ter um desempenho suficiente para a maioria das pessoas.
- O C # chegou mais tarde e aprendeu muitas lições nas quais o Java se deparou - para que eles pudessem evitar algumas das limitações técnicas que o Java possui por causa do ponto 3.
- Os novos recursos de idioma precisam resolver um problema real de maneira sensata. Nem todo recurso de idioma faz sentido no contexto do idioma ao qual você está tentando adicioná-lo. É por isso que, apesar de suas semelhanças, Java e C # continuarão sendo linguagens diferentes.
Então, o C # tem mais recursos de linguagem que o Java? Acho que sim. Eles são úteis? Acho que sim. Isso significa que o C # é melhor ou mais maduro que o Java? Que eu discordo. Eles são diferentes, claros e simples. Java nunca terá todos os recursos do C #, como C # nunca terá todos os recursos do Java.
Um dos recursos do Java, a capacidade de escrever um programa no Windows e implantá-lo no Unix ou Mac, nunca acontecerá diretamente pelo suporte da Microsoft. Porque você pergunta? Não é porque a Microsoft é má (se é verdade ou não, eu realmente não me importo). É porque eles aprenderam uma lição que a Sun nunca aprendeu: escrever uma vez, executado em qualquer lugar, comodifica os sistemas operacionais e o hardware. Se você se preocupa em ganhar dinheiro com as vendas do seu sistema operacional, não deseja tornar trivial a troca e ainda assim ter um aplicativo funcionando. Se você fez isso, não poderá lucrar com o sistema operacional, porque sempre há opções mais baratas.