JavaRush /Blog Java /Random-ES /10 funciones de Java 8 de las que no has oído hablar.

10 funciones de Java 8 de las que no has oído hablar.

Publicado en el grupo Random-ES
Lambdas, lambdas, lambdas. Eso es todo lo que se oye cuando la gente habla de Java 8. Pero eso es sólo una parte. Java 8 tiene muchas características nuevas: algunas clases y modismos nuevos y poderosos, y otras simplemente cosas que deberían haber estado ahí desde el principio. Quería pasar a diez funciones nuevas que considero pequeñas joyas que definitivamente vale la pena conocer. Seguramente habrá al menos uno o dos entre ellos que te gustaría probar, ¡así que comencemos! 1) Métodos predeterminados. Como novedad en el lenguaje Java, ahora puede agregar cuerpos de métodos a las interfaces ( métodos predeterminados ). Estos métodos se agregan incondicionalmente a todas las clases que implementan estas interfaces. Esto le brinda la oportunidad de agregar nuevas funciones a las bibliotecas existentes sin romper el código anterior. Eso es definitivamente una ventaja. Por otro lado, desdibuja seriamente la línea entre la interfaz, que obliga a seguir ciertas condiciones como una convención, y la clase que las sigue, como su implementación privada. En las manos (correctas) adecuadas, esta puede ser una forma elegante de hacer que las interfaces sean más inteligentes, evitar la repetición y ampliar las bibliotecas. En malas manos; Pronto veremos métodos en interfaces que llaman a esto y lo convierten en un tipo concreto. Brrr.... 2) Detener procesos. Iniciar un proceso adicional es una de las cosas que hace sabiendo a medias que volverá (depurarlo) para depurarlo cuando el proceso (se agriete) (se bloquee), se aborte, (se cuelgue), se cuelgue o utilice el 100% de la CPU. La clase Proceso ahora ha sido armada con dos nuevos métodos para ayudarlo a controlar los procesos rebeldes. El primero, isAlive() , le permite comprobar fácilmente si un proceso se está ejecutando sin tener que esperarlo. El segundo y más poderoso (¡advertencia!) es destroyForcively() , que le permite (descaradamente) detener con fuerza (matar) un proceso que ha excedido su tiempo (en espera o no) o que ya no es necesario. 3) Bloqueo estampado. Ahora algo realmente emocionante. A nadie le gusta sincronizar código. Esta es una forma segura de ralentizar el rendimiento de su aplicación (especialmente a gran escala) o, peor aún, hacer que se congele. Y, sin embargo, a veces simplemente no tienes otra opción. Existen muchos modismos para sincronizar el acceso multiproceso a un recurso. Uno de los más preferidos es ReadWriteLock e implementaciones relacionadas. Este modismo reduce la contención al permitir que varios subprocesos utilicen un recurso mientras bloquea solo los subprocesos que lo manipulan. Suena genial, pero en la práctica este bloqueo es muy lento , especialmente con una gran cantidad de hilos de escritura. Esto resultó ser tan malo que Java 8 introduce un nuevo RWLock llamado StampedLock . Este bloqueo no solo es más rápido, sino que también ofrece una potente API para bloqueo optimista, donde puede obtener un bloqueo de lectura a bajo costo, con la esperanza de que no se produzca ninguna operación escrita durante las secciones críticas del código. Al final de la sección, le pregunta al bloqueo si la grabación se produjo durante ese tiempo, en cuyo caso puede decidir si intentarlo de nuevo, escalar el bloqueo o darse por vencido. Este candado es una herramienta poderosa y merece una publicación sobre sí mismo. Estoy vertiginosamente entusiasmado con este nuevo juguete. ¡Excelente! Además puedes leer Aquí . 4) Registradores competidores. Esta es otra pequeña joya para cualquiera que ejecute aplicaciones multiproceso. Una nueva API simple y eficiente para leer y escribir contadores de múltiples subprocesos. A veces, es incluso más rápido que usar AtomicIntegers. ¡Bastante impresionante! 5) Valores opcionales (u opcionales). Oh, punteros nulos, un dolor de cabeza para todos los desarrolladores de Java. Quizás la más popular de todas las excepciones, ha existido desde tiempos muy remotos. Al menos desde 1965 . Tomando prestado de Scala y Haskell, Java 8 tiene un nuevo patrón, llamado Opcional, para encapsular referencias que pueden ser nulas. Esto no es de ninguna manera una solución milagrosa que eliminará el valor nulo, sino más bien un medio para que los diseñadores de API indiquen a nivel de código (en lugar de documentación) que se puede devolver o pasar un valor nulo al método, y la persona que llama debe prepárate para ello. Por lo tanto, esto solo funcionará para nuevas API, siempre que las personas que llaman no permitan que la referencia escape del contenedor, donde podría desreferenciarse de manera insegura. Debo decir que soy bastante ambivalente acerca de esta característica. Por un lado, los valores nulos siguen siendo un gran problema, por lo que agradezco todo lo que se ha hecho para solucionarlo. Por otro lado, soy bastante escéptico de que esto tenga éxito. Esto se debe a que el uso de Opcional requiere un esfuerzo sostenido por parte de toda la empresa y tiene poco impacto inmediato. Sin una aplicación estricta, es probable que permanezca en el lado izquierdo de la carretera. Lea más sobre Opcional . 6) Anota todo. Otro pequeño avance en el lenguaje Java: se pueden agregar anotaciones a casi todo el código. Anteriormente, las anotaciones sólo se podían agregar a cosas como clases o declaraciones de métodos. Desde Java 8, se pueden agregar anotaciones a declaraciones de variables y parámetros, al convertir un valor a un tipo específico o incluso al asignar un nuevo objeto. Esto es parte de un esfuerzo concentrado (junto con mejoras en las herramientas y API de JavaDoc) para hacer que el lenguaje sea más amigable para las herramientas de medición y análisis estático (como FindBugs). Esta es una buena característica, pero al igual que invokeDynamic introducido en Java 7, su valor real dependerá de lo que la sociedad haga con él. 7) Operaciones de desbordamiento. Ahora, aquí hay un conjunto de métodos., que debería haber sido parte de la biblioteca principal desde el primer día. Mi pasatiempo favorito es depurar desbordamientos numéricos cuando los enteros exceden 2^32 y proceder a crear los errores más desagradables e inesperados (es decir, "¿cómo diablos obtengo este valor extraño?"). Nuevamente, no hay soluciones mágicas aquí, pero hay muchas funciones para manipular números que se descartan cuando se desbordan de una manera menos indulgente que su operador +/* estándar, que se desborda incondicionalmente. 8) Recorrer el catálogo. Iterar a través del contenido de un árbol de directorios ha sido durante mucho tiempo una de esas cosas que la gente busca en Google (en cuyo caso probablemente se le recomendará que utilice Apache.FileUtils). Java 8 le da un lavado de cara a la clase Archivos con diez nuevos métodos. Mi favorito es walk() , que crea un subproceso diferido (importante para sistemas de archivos grandes) para recorrer el contenido de una estructura de directorios. 9) Fuerte generación aleatoria. Hoy en día no falta hablar de la vulnerabilidad de las contraseñas y claves. La seguridad del software es un negocio complejo y propenso a errores. Por eso me gusta el nuevo método SecureRandom. getinstanceStrong() , que selecciona automáticamente el generador aleatorio más potente disponible para la máquina virtual Java. Esto reduce las posibilidades de que falle o tenga un generador débil, lo que hará que las claves y los valores cifrados sean más susceptibles a la piratería. 10. Fecha.aInstant(). Java 8 introduce una API completamente nueva para fechas y horas . Esto es bastante comprensible ya que el existente no es muy bueno. Básicamente, Joda ha estado avanzando hacia una API de Java para fechas y horas durante varios años. Sin embargo, incluso con la nueva API, persiste un gran problema: hay una gran cantidad de código y bibliotecas que utilizan la antigua API. Y todos sabemos que llegaron para quedarse. ¿Entonces que vas a hacer? Para lograr esto, Java 8 hizo algo bastante elegante al agregar un nuevo método a la clase Date llamado toInstant() que la convierte en una nueva API. Esto le permite dar un salto rápido a la nueva API, incluso cuando trabaja con código que usa la API de fecha anterior (y continuará haciéndolo en el futuro previsible).
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION