Sei sulla pagina 1di 7

Nuevas Funcionalidades

1) Métodos default en interfaces


Si hasta ahora en una interfaz solo podíamos tener constantes y métodos
abstractos (cabecera de método), ahora tendremos la posibilidad de declarar
métodos con un comportamiento por defecto en una interfaz. Antes de Java
8 podíamos definir que toda clase que implementa a una interfaz debe
construir, declarar, dar cuerpo a los distintos métodos que contenga la
interfaz. En cambio, en Java 8, toda clase que implemente una interfaz debe
declarar los distintos métodos que contenga la interfaz salvo aquellos que
estén definidos como métodos por defecto. Estos métodos se caracterizan
porque sonmétodos que están declarados en la propia interfaz y pueden ser
utilizados directamente en la clase si nos interesa su comportamiento por
defecto. Esta nueva funcionalidad queda detallada con un ejemplo al final de
este artículo .

2) Java.util.function
Nueva API en Java 1.8 que se conoce como el paquete que contiene
interfaces funcionales, es decir,interfaces que declaran funciones de uso
común . Las interfaces en este paquete son anotadas
como@FunctionalInterface . Por otro lado cabe destacar que dicha
anotación, @FunctionalInterface , podemos utilizarla en una interfaz que
queramos declararla como funcional. Estas interfaces funcionales se
caracterizan porque pueden ser instanciadas por lambdas.
¿Te está gustando esté artículo? Puedes aprender mucho más si está suscrito
a nuestra lista de correo. Recibirás noticias, tutoriales, nuestros nuevos
lanzamientos y mucho más.

3) Lambda
En Java 8 se añaden lambdas con la idea de añadir funciones dentro del
lenguaje. Vemos un ejemplo de cómo podremos utilizar lambdas en Java
8: Definimos una interfaz ICalculadoraLamba que describe una operación
general entre dos números:

@FunctionalInterface

public interface ICalculadoraLambda {

public int operacion (int x,int y);

¿Cómo podemos hacer que esta operación sirva para realizar una suma y
producto en un mismo programa principal Java? Se consigue declarando en
una variable cuál es el comportamiento de este método haciendo uso de
lambdas . Lo vemos a continuación:

ICalculadoraLambda iSuma = (x,y) -> x + y;

System.out.println(iSuma.operacion(4, 5));

ICalculadoraLambda iMultiplicacion= (x,y) -> x * y;

System.out.println(iMultiplicacion.operacion(4, 5));

Por consola se muestra 9 y seguidamente 20. Esto solo es una pequeña


muestra de todo lo que dará que hablar las Lambdas en Java 8.

4) Java.util.Stream
Biblioteca de clases que nos permitirá realizar distintas operaciones
funcionales sobre streams . ¿Cuándo va a ser útil utilizar un objeto de este
tipo? Lo vemos con un ejemplo: Obtener cuántas veces aparece el número 5
en una lista de números:

5) Java.time
Nueva API para tratar fechas, tiempos, instantes y duraciones . Nos
familiarizaremos con clases como: -LocalTime : permite almacenar una hora
sin fecha tal como: 12:30:16 - LocalDate : la utilizaremos para almacenar
fecha sin hora, tal como 2010-03-01 - LocalDateTime : permite almacenar
una fecha con hora.

6) Nuevas Excepciones
En Java 8 disponemos de nuevas excepciones que podrán ser utilizadas tales
como:UncheckedIOException .

7) Nuevos métodos en clases de uso común


Algunos de estos métodos son:
 En la clase String el método estático join que nos permite unir distintas
cadenas de caracteres en una.

public static String join(CharSequence delimiter,
CharSequence... elements)

 En la clase Integer nos encontramos con nuevos métodos estáticos


que nos permiten:

o Dividir y comparar números sin tener en cuenta su signo:

public static int divideUnsigned(int dividend, int divisor)

public static int compareUnsigned(int x, int y)

o Las operaciones de suma, resta , obtener el máximo y el


mínimo entre dos números:

public static int sum(int a, int b)

public static int max(int a, int b)

Como dijimos anteriormente, pasamos a detallar una de las novedades que


nos trae Java 8: - Métodos default en Interfaces. Añadir métodos con cuerpo
en las interfaces: Hasta ahora, las interfaces solo podían contener cabecera
de métodos abstractos y constantes. Ejemplo:
Una clase que implementa dicha interfaz debe contener como mínimo la
implementación de los métodos que han sido declarados en la interfaz. Todo
tipo de calculadora que implemente ICalculadora podrá realizar todas las
operaciones que se indiquen en esta última.

Por tanto, si en la interfaz se añade posteriormente un método abstracto, en


la clase Java que implementa a dicha interfaz encontraríamos un error de
compilación "NECESITA IMPLEMENTAR EN LA CLASE EL NUEVO MÉTODO
CREADO EN LA INTERFAZ"

Este error se soluciona, añadiendo a la clase la implementación del método


"restar":

¿Qué hay de nuevo ahora en Java 8?


Podremos encontrarnos con un nuevo elemento en las interfaces: métodos
por defecto . Estos métodos se caracterizan porque ya en la interfaz
podemos declararles un comportamiento por defecto.

Estos métodos no se tienen que declarar en la clase que implementa a la


interfaz, directamente podrán ser utilizados. Realizamos un método principal
para probar las distintas operaciones que podremos realizar desde una
Calculadora y vemos cómo podemos hacer uso del método multiplicar desde
un objeto Calculadora sin que dicho método esté implementado en la clase
Calculadora (esto se debe a que dicho método se ha declarado como método
default en la interfaz ICalculadora):

Ahora bien, cabe destacar que los métodos que definimos default pueden ser
redefinidos en las clases. Si al método multiplicar en Calculadora queremos
darle un comportamiento diferente podríamos redefinir el método de la
siguiente forma:
La prueba anterior ya no daría el mismo resultado ya que ahora la
multiplicación se realiza entre los números 3 y 4.

Tras ver el ejemplo, cabe destacar que en una interfaz podremos


añadir nuevos comportamientos por defecto ( métodos default ) que no
tendrán por qué ser tratados en todas las clases que implementen a dicha
interfaz pero sí podrán ser utilizados en todas ellas.