Enjoy A New Student Discount All 55,000 Courses on sale for Only $12.99

Ends in 05h 23m 49s

Java8 después de 2014

La version 1.8 de Java, fue lanzada en 2014, y, desde entonces hasta ahora, las cosas parece no haber evolucionado mucho, es mas, creo que todavía hay muchas funcionalidades aportadas entonces, que o no se conocen, o se utilizan mas bien poco

Leer más: Java8 después de 2014

Incluso antes de empezar con la revisión de lo que nos dejamos de Java 8, quiero recordar, que hoy en día, después de llevar mas de 8 años viendo como la clase Date esta deprecada, me sigo encontrando con mucha gente que no conoce otra cosa para trabajar con fechas, u otros muchos que desconocen una modificación de la sentencia try-catch para trabajar con clases Autocloseables que te permite eliminar el Finally, o por lo menos, ahorrarte la preocupación de cerrar el recurso cuando se detecta un error.

Si, parece que seamos un poco despistados respecto a este lenguaje….pero no creo que sea eso la causa. Java es un lenguaje extenso, y difícil de seguir todas las clases que a diario utilizamos en nuestro trabajo, con lo que se hace casi imposible sustituir clases que nosotros consideramos validas, o estructuras ampliamente utilizadas, por nuevos patrones que nos aporta el lenguaje.

Estamos habituados ya, y tras muchos esfuerzos a utilizar try-catch-finally, la clase Date la consideramos valida aunque existan importantes diferencias si la obtenemos de «java.sql», o de «java.util», como muchos de vosotros habréis sufrido, y entonces… ¿Por qué cambiar?

En este articulo, no quiero entrar en ese tema…¿Por que?, Sabemos que hay muchas razones para hacer caso a los «constructores» y evolucionar como lo hacen ellos, y aquí solo presentare los cambios que aparecieron en Java 8.

Lo podremos utilizar de índice para encontrar los ejemplos y artículos que iré publicando sobre cada una de las novedades; que esto sirva de resumen de todo un trabajo a desarrollar por mi, a partir de ahora para proporcionaros detalles de lo que tenemos nuevo, y de para que podemos utilizarlo

Novedades de Java 8

Las expresiones lambda

Posiblemente, es la parte mas conocida de la version 1.8. Podríamos compararlos con funciones anónimas, que nos permiten resolver temas, ahorrándonos escritura

En función de los parámetros de entrada/salida, podríamos clasificarlas en Consumer, Supplier, Predicate and Function, y dejar un espacio para las Reference 

Detalles y ejemplos

Presentación de las funciones lambda

Interfaces funcionales

La primera modificación que nos aporta Java8, es la posibilidad de permitir que una interface nos aporte también código, con lo que resuelve una de las limitaciones del lenguaje, y que era la herencia múltiple.

Pero otra modificación, es la de las interfaces funcionales. Se tratan de interfaces convencionales que tienen un único método abstracto (sin código), pudiendo tener tantos métodos default (resueltos) como queramos.

Y aun es mas llamativa la forma de implementarla, ya que no será necesario una clase, si no la simple creación de una variable del tipo definido por la interfaz, y que refiera una función compatible con la definición de la interfaz

Pensemos en esta interfaz

Ahora, la podemos utilizar así:

La declaración de @FunctionalInterface es opcional, ya que si SOLO tiene un método abstracto, se considerara así, aunque podamos seguir utilizándola de la forma tradicional

La versión ya cuenta con una cantidad de interfaces preparadas

Que nos aportan la posibilidad de crear funciones sobre la marcha

Tanto empleando objetos genéricos como primitivas

Detalles y ejemplos

La interfaz funcional se publicará el 3/10/2022

Se publicarán mas durante el mes de Octubre

Referencias

Hasta ahora, las llamadas a las clases tenían estructura rígidas, identificando métodos estáticos y dinámicos perfectamente; ahora toda esa zona queda un poco difuminada por medio de las llamadas por referencia, ya que me permite hacer llamadas a métodos dinámicos, utilizando el nombre de la clase, o el nombre del objeto.

Detalles y ejemplos

Se publicarán durante el mes de Octubre

Streams

Es la otra gran novedad de Java8. Pensado para el tratamiento de colecciones, nos da una flexibilidad increíble para su procesamiento.

Partimos que tanto Array, como Collection disponen de un método stream(), que las convierte en una stream, y a partir de ese momento, las podemos tratar como tal.

Incluso para arrays que no soporten el método stream, siempre nos queda utilizar Stream.of(…).

Cada uno de los métodos que podemos ir acumulando, van devolviendo un resultado por elemento, que se utiliza en la siguiente operación (Excepto en los métodos considerados finales: collect, reduce, forEach)

o si queremos ver como podemos generarlos también…..

Detalles y ejemplos

Se publicarán durante el mes de Octubre/Noviembre 2022

Optional

Tipo de campo que integra las funciones necesarias para detectar nulos

Realmente, se trata de una clase que es capaz de contener valores y nulos, y dispone de métodos que nos facilitan la detección del nulo, o del valor, esquivando la excepción que recibimos.

Podéis plantearos las ventajas que representa viendo esta sencilla función para parsear enteros

Detalles y ejemplos

Se publicarán durante el mes de Octubre/Noviembre 2022

El paquete java.time

Puede que el otro gran cambio de Java 8, sea este paquete.

En esta version, se han actualizado todas las clases que estamos utilizando para trabajar con tiempo (fecha y hora), creando clases no modificables y Thread-safe, a la ves que se ha racionalizado su uso

Todas las clases, provienen del paquete java.time

  • java.time:
    • Paquete base con clases como LocalTime, LocalDate, LocalDateTime, Instant, Period, Duration,…Todas son inmutables y thread-safe
  • java.time.chrono:
    • Con API genericas para calendarios no-ISO. Permite crear tu propio calendario
  • java.time.format
    • Clases para formatear objetos de fecha y hora
  • java.time.temporal
    • Contiene objetos temporales relacionados con fecha/hora
  • java.time.zone
    • Contiene clases para soportar diferentes zonas horarias

Además, disponemos de Locale, para trabajar con configuraciones regionales, en las que se incluye el cambio de idioma para las enumeraciones de días de la semana y meses del año, herramientas para modificar la fecha y/o la hora, y para filtrar fechas

Las clases están agrupadas en interfaces, siendo la principal TemporalAccessor, por lo que es muy facil movernos con módulos polimórficos.

Podemos crear un objeto fecha (LocalDate), hora (LocalTime), fecha/hora (LocalDateTime) entre otros, a partir del reloj del ordenador, de otras herramientas reloj, indicando la Zona horaria, parseando desde una string una fecha u hora, o utilizando un día de época (desde 1970), un dia de un año,

Detalles y ejemplos

Se publicarán durante el mes de Octubre/Noviembre 2022

Anotaciones

En Java8, se mejora el manejo y creación de Anotaciones, al permitir usarlas en cualquier lugar donde se pueda utilizar un tipo

Además, nos permite manejar anotaciones @Repeatable.

Hay que tener claro que no se aumenta el numero de anotaciones, solo la capacidad de usarlas, eso significa, que las anotaciones las podremos crear nosotros, y luego, las podríamos usar así:

  • @NonNull String str;
  • @NonNull List
  • List<@NonNull String> str
  • Arrays<@NonNegative Integer> sort
  • @Encrypted File file
  • @Open Connection connection
  • void divideInteger(int a, int b) throws @ZeroDivisor ArithmeticException
  • class UnmodifiableList implements @Readonly List<@Readonly T> { … }

Detalles y ejemplos

Se publicarán durante el mes de Octubre/Noviembre 2022

Nuevas excepciones

Se ha de mencionar la nueva excepción UncheckedIOException, que recubre la la actual IOException para facilitar el tratamiento dentro de Lambdas. Aunque no deja para nosotros la simplificación en otros muchos casos, nos facilita esta herramienta para que nos acostumbremos a utilizarla.

Entre los ejemplos, podréis ver la funcionalidad y necesidad de la misma.

Detalles y ejemplos

Se publicarán durante el mes de Noviembre 2022

Nuevos métodos

Java 8 aporta un numero muy importante de métodos nuevos a los objetos que ya conocemos; aunque mas adelante proporcionare una lista completa de todos ellos, ahora quiero señalar solo algunos de los que podemos ver como mas útiles, como por ejemplo los añadidos a string

  • static String join(CharSequence delimiter, CharSequence… elements)
  • static String join(CharSequence delimiter, Iterable elements)

O los añadidos a Collection

  • Iterable.forEach(Consumer)
  • Iterator.forEachRemaining(Consumer)
  • Collection.removeIf(Predicate)
  • Collection.spliterator()
  • Collection.stream()
  • Collection.parallelStream()
  • List.sort(Comparator)
  • List.replaceAll(UnaryOperator)
  • Map.forEach(BiConsumer)
  • Map.replaceAll(BiFunction)
  • Map.putIfAbsent(K, V)
  • Map.remove(Object, Object)
  • Map.replace(K, V, V)
  • Map.replace(K, V)
  • Map.computeIfAbsent(K, Function)
  • Map.computeIfPresent(K, BiFunction)
  • Map.compute(K, BiFunction)
  • Map.merge(K, V, BiFunction)
  • Map.getOrDefault(Object, V)

Detalles y ejemplos

Se publicarán durante el mes de Diciembre 2022

Conclusión

Realmente, el no haber hecho este trabajo en 2014, no dice cosas demasiado buenas de mi, pero, por lo menos, ahora mi intención es buena, y todos estos ejemplos y ampliaciones los iré compartiendo a medida que los pueda preparar, trabajo entretenido ya que no he visto demasiado de todo ello en internet, y menos, en castellano.

Así que, ya lo sabéis, podéis suscribiros al blog, para que os vayan apareciendo las comunicaciones de las publicaciones, y, si queréis, también me podéis seguir en mi canal de YouTube, en donde iré publicando todo aquello que piense que es mas interesante o mas difícil de explicar en el blog


Descubre más desde Recursos para formacion

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Deja un comentario

/*Si te ha gustado el artículo
no dudes en compartirlo*/

Facebook
Twitter
LinkedIn

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies

Ver mi IP

Ver ip de mi máquina
tipo valor
Ip: 216.73.216.169
Proxy: 216.73.216.169
Remote host: 216.73.216.169
Remote port: 46534
** 216.73.216.169, 172.69.130.47