c# java

Características del lenguaje Java que no tienen equivalente en C#



(5)

Habiendo trabajado principalmente con C #, tiendo a pensar en términos de características de 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 deseo que estuvieran en C #. A continuación hay una lista de los que conozco. ¿Alguien puede pensar en otras características del lenguaje Java que una persona con un fondo de C # no se dé cuenta de que existe?

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 el Artículos (muy) largos. 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 características del idioma o de la biblioteca principal que no pueden implementarse de manera efectiva por su propio código personalizado o bibliotecas de terceros.

  1. Tipo de retorno covariante: un método puede ser anulado por un método que devuelve un tipo más específico. Es útil cuando se implementa una interfaz o se extiende una clase y desea que un método de reemplazo devuelva un tipo más específico a su clase. Esto se puede simular utilizando la implementación de la interfaz explícita en C #, pero no hay un equivalente simple al anular los métodos de clase.

  2. 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.

  3. Clases internas anónimas: define 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 delegados en .Net, hay algunos casos en los que realmente necesita pasar varias devoluciones de llamada como grupo. Sería bueno tener la opción de utilizar una clase interna anónima.

  4. Excepciones comprobadas: puedo ver cómo esto es útil en el contexto de los diseños comunes que se usan con las aplicaciones Java, pero mi experiencia con .Net me ha puesto en el hábito de usar excepciones solo para condiciones irrecuperables. Las excepciones de IE indican un error en la aplicación y solo se detectan con el fin de iniciar sesión. No he llegado a la idea de usar excepciones para el flujo normal de programas.

  5. strictfp - Asegura una aritmética de punto flotante estricta. No estoy seguro de qué tipo de aplicaciones encontraría esto útil.

  6. campos en las interfaces: es posible declarar campos en las interfaces. Nunca he usado esto.

  7. Importaciones estáticas: permite utilizar los métodos estáticos de una clase sin calificarlos con el nombre de la clase. Me acabo de dar cuenta hoy que esta característica existe. Suena como una buena conveniencia.


¡Literales octales! :RE

int x = 0245; System.out.println(x);


Se emite 165. Divertido :)


En C #, no puede tener una declaración de retorno en un bloque finally.


Java tiene paquetes que reflejan una jerarquía y un diseño de sistema de archivos, mientras que en C # los ensamblajes son independientes de la jerarquía de espacio de nombres.


No sé si quieres esto en tu idioma, pero creo que Type Erasure puede ser visto como una característica para algunos.


Los genéricos de Java permiten comodines tipográficos. Por ejemplo, <T extends Object & Comparable<? super T>> T Collections.max(Collection<? extends T>) { ... } <T extends Object & Comparable<? super T>> T Collections.max(Collection<? extends T>) { ... } no se puede expresar en C #.