Habiendo trabajado principalmente con C#, tiendo a pensar en términos de características C# que no están disponibles en Java. Después de trabajar mucho con Java durante el último año, comencé a descubrir las características de Java que desearía que estuvieran en C#. A continuación hay una lista de las que tengo conocimiento. ¿Alguien puede pensar en otras características del lenguaje Java que una persona con un fondo C# puede no darse cuenta?Características del lenguaje Java que no tienen equivalente en C#
Los artículos http://www.25hoursaday.com/CsharpVsJava.html y http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp dan una lista muy extensa de diferencias entre Java y C#, pero me pregunto si me perdí algo en los (muy) largos artículos. También puedo pensar en una característica (tipo de retorno covariante) que no vi mencionada en ninguno de los artículos.
Limite las respuestas a las funciones de idioma o biblioteca central que no pueden ser implementadas efectivamente por su propio código personalizado o bibliotecas de terceros.
Tipo de retorno covariante: un método puede anularse mediante un método que devuelve un tipo más específico. Es útil cuando se implementa una interfaz o se extiende una clase y se desea que un método de anulación devuelva un tipo más específico para su clase. Esto se puede simular utilizando la implementación explícita de la interfaz en C#, pero no hay un equivalente simple al anular los métodos de clase.
Las enumeraciones son clases: una enumeración es una clase completa en Java, en lugar de una envoltura alrededor de una primitiva como en .Net. Java le permite definir campos y métodos en una enumeración.
Clases internas anónimas: definen una clase anónima que implementa un método. Aunque la mayoría de los casos de uso para esto en Java están cubiertos por los delegados en .Net, hay algunos casos en los que realmente necesita pasar múltiples devoluciones de llamadas como un grupo. Sería bueno tener la opción de usar una clase interna anónima.
Excepciones comprobadas: puedo ver que esto es útil en el contexto de diseños comunes utilizados con aplicaciones Java, pero mi experiencia con .Net me ha dado la costumbre de utilizar excepciones solo para condiciones irrecuperables. ES DECIR. las excepciones indican un error en la aplicación y solo se capturan con el fin de iniciar sesión. Todavía no he llegado a la idea de usar excepciones para el flujo normal de programas.
strictfp - Asegura una aritmética estricta en coma flotante. No estoy seguro de qué tipo de aplicaciones encontraría esto útil.
campos en las interfaces - Es posible declarar los campos en las interfaces. Nunca he usado esto.
importaciones estáticas: permite usar los métodos estáticos de una clase sin calificarlo con el nombre de la clase. Me di cuenta hoy que esta característica existe. Parece una buena conveniencia.
Espero que esto sea una mejora con respecto a mi última versión de esta pregunta (no relevante si no sabes de lo que estoy hablando). Hubo una respuesta que pensé que era bastante buena y podría haber marcado como la respuesta. – jthg
+1 por hacer el esfuerzo de volver a redactar. – spender
Si la característica de falta de propensión a errores es una característica, entonces java no admite 'inseguro', sin embargo, java tiene soporte para jni, que es una ronda sobre el camino :) – questzen