En general, hay una serie de cambios bastante amplios para facilitar las cosas al programador. Es posible que su gerente no se preocupe demasiado por esas cosas, pero hacer que los programadores pasen menos tiempo pensando en el código repetitivo y, por lo tanto, tengan más tiempo para pensar sobre el objetivo real de lo que están implementando, debería aumentar la eficiencia, disminuir los errores, etc. lo cual puede ser un argumento muy poderoso. Oracle tiene una lista bastante extensa de cambios , pero es bastante larga, por lo que resumiré tanto como sea posible.
Las características del lenguaje incluyen:
- Menos repetitivo en genéricos. El código
Map<String, String> myMap = new HashMap<String, String>();
se puede reducir a Map<String, String> myMap = new HashMap<>()
. El compilador puede inferir los tipos genéricos necesarios en el lado derecho desde la izquierda, por lo que su código se vuelve un poco más corto y más rápido de leer.
- Las cadenas funcionan ahora en sentencias de interruptor , utilizando la semántica del
.equals()
método en lugar de ==
.
- Gestión automática de recursos utilizando try-with-resources. Esto hace que el código sea más limpio, pero también tiene una ventaja sobre el código antiguo de prueba / finalmente basado. Si se lanza una excepción en la declaración de prueba, y luego se lanza otra al cerrar, el código que usa las declaraciones tradicionales de prueba / finalmente perderá por completo la excepción original, y solo pasará la que se lanzó en el bloque finalmente. En una declaración de prueba con recursos, el tiempo de ejecución suprimirá la excepción que arrojaron las llamadas close () y burbujeará la excepción original en la pila, bajo el supuesto de que esta excepción original es la que causó todos los problemas en el primer lugar. Además, en lugar de abandonar la otra excepción al recolector de basura, esta supresión permite que se recuperen las excepciones lanzadas de cerca usando
Throwable.getSuppressed
.
- Los literales numéricos pueden hacerse más fáciles de leer. Todos los literales numéricos permiten guiones bajos , por lo que cosas como
int n = 1000000000
se pueden convertir en mucho más legibles int n = 1_000_000_000
, lo que es mucho más fácil de analizar como mil millones y más difícil de escribir incorrectamente sin darse cuenta. Además, los literales binarios están permitidos en el formulario 0b10110101
, lo que hace que el código que funciona con campos de bits sea un poco más agradable de leer.
- Se puede manejar múltiples tipos de excepción en la misma instrucción catch , reduciendo la duplicación de código y potencialmente facilitando la refactorización posterior.
Cada uno de estos cambios es algo que a su gerente podría no importarle directamente, pero hacen que sea un poco más fácil escribir el código correcto sin tanto esfuerzo y pensamiento, liberando su mente para concentrarse un poco más en la lógica real que está intentando para implementar, y también hacen que sea un poco más fácil leer el código más tarde, lo que hace que la depuración sea un poco más rápida.
En el lado de la API, también se han producido varias actualizaciones de la API:
- En cuanto a la seguridad , se han agregado / desaprobado varios métodos de encriptación, a medida que la criptografía avanza.
- El archivo IO ha sido cambiado ( aunque este podría ser un mejor enlace ) agregando una mejor abstracción en varios lugares. No me he sumergido personalmente en las nuevas cosas de IO, pero parece una revisión muy útil, lo que hace que sea mucho más fácil trabajar con el sistema de archivos sin tanto dolor.
- El soporte Unicode es hasta Unicode 6.0, junto con una serie de otras mejoras de internacionalización.
- Java2D , que mencionó en su pregunta, se ha mejorado. Mejor soporte de fuentes Linux, mejor renderizado X11 en máquinas modernas y manejo de scripts tibetanos.