Tenga en cuenta que esto no pretende ser un argumento Java vs. C #. Soy un programador de Java sin experiencia en C #, preguntando solo por curiosidad.
Leí un poco en C #, y parece que tiene muchas más funciones que Java. Una serie de ejemplos:
- Tipo de inferencia.
dynamic
palabra clave.- Delegados
- Parámetros opcionales
- Lambda y LINQ (en realidad no tengo idea de cuáles son).
- Propiedades.
Sin embargo, Java realmente no presenta nada que C # no tenga.
Mi pregunta es: ¿por qué C # tiene muchas más características nativas que Java? ¿Y por qué Java no agregó algunos de estos a lo largo de los años, por ejemplo, Propiedades o inferencia de tipos? ¿Los diseñadores del lenguaje Java toman un enfoque más simplista? ¿Cuál es la razón para esto?
Respuestas:
Muchas rasones:
El resultado es que Java ahora tiene una pequeña brecha de características. Tiene grandes planes para el futuro, pero como es habitual con este tipo de cosas, todo lleva un poco más de tiempo de lo planeado.
fuente
Agregaría a la respuesta de Kilian que una gran diferencia entre Java y C # es que los diseñadores de C # controlan no solo el lenguaje, sino también el IDE estándar.
Agregar algo como métodos de extensión y clases parciales podría ser una pesadilla en el control de versiones de desarrollo / control si los IDE no lo admitieran adecuadamente.
Como se espera que pueda compilar Java con su plataforma de elección (Eclipse, Netbeans, vi + Ant), agregar funciones que rompan el código (y usarlas para desarrollar extensiones adicionales como LINQ) es mucho más complicado que decir " Como IntelliSense se ocupará de estos casos, no debemos preocuparnos ".
Además, a veces vale la pena señalar el valor de las características en lugar de su número. Por ejemplo, las propiedades automáticas son agradables y ciertamente desearía que Java lo admitiera, pero al final solo significa que tiene que escribir algunas líneas más de código en Java. De manera similar, encuentro que llamar a "Eventos" una característica es algo inapropiado, ya que son poco más que delegados especialmente etiquetados, y solo una copia refinada del patrón de Observador ya utilizado por Java (por otra parte, en Java necesita más información explícita codificación)
No me malinterpreten, creo que C # ha introducido varias innovaciones notables, y deseo que algún día los grandes jefes de Oracle se despierten y lancen un verdadero "Java 2" para incluir algunos de estos, pero la brecha no es tan obvia como su puntos de pregunta
fuente