Poco a poco nuestras aplicaciones van evolucionando de versión de Java y mas pronto que tarde nos encontraremos utilizando un JDK 7 en los nuevos desarrollos . Java 7 incluye muchas novedades vamos a revisar algunas que me han parecido interesantes y que muchas veces nos olvidamos de ellas.
Captura de excepciones
A partir de ahora podemos capturar varias excepciones utilizando el mismo bloque catch sin tener que recurrir a utilizar excepciones que se encuentran en jerarquias superiores obteniendo de esta forma un control mas fino.
package com.arquitecturajava; import java.util.InputMismatchException; import java.util.Scanner; public class PrincipalExcepciones { public static void main(String[] args) { System.out.print("Introduce un número "); try { Scanner scanner = new Scanner(System.in); int numero = scanner.nextInt(); if (numero < 0) { throw new ExcepcionDeParametro(); } System.out.println("El numero es :" + numero); } catch (InputMismatchException | ExcepcionDeParametro e) { System.out.println("ha ocurrido un error"); } } }
Operador diamante
Otra de las mejoras que dispone Java7 es del tema de los Genéricos que nos aporta un operador nuevo que nos permite simplificar la forma en la que definimos estos tipos. Habitualmente la declaración de un tipo genérico es la siguiente en Java 6.
package com.arquitecturajava; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class PrincipalGenericos { public static void main(String[] args) { List lista= new ArrayList(); lista.add("hola"); Map<String,List> mapa= new HashMap <String,List>(); mapa.put("mensaje", lista); } }
En Java 7 podemos simplificar y utilizar el operador <> denominado operador “diamante” para clarificar la declaración de tipos y no tener tanta información repetida.
package com.arquitecturajava; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class PrincipalGenericosJava7 { public static void main(String[] args) { List<String> lista= new ArrayList<>(); lista.add("hola"); Map<String,List<String>> mapa= new HashMap <>(); mapa.put("mensaje", lista); } }
No entendi muy bien el uso del operador diamante :/
Lo de hacer el catch múltiple, no entiendo como es que no lo pusieron antes. Me parece que debe haber sido de lo mas fácil de hacer. En cuanto al operador diamante, es un tanto turbio. Digo, si uno tiene Map[String,List[String]] mapa= new HashMap [] (cambié los “<" por "[") se entiende que internamente la lista va a ser un ArrayList y el map un HashMap Esto hace que nos tengamos que aprender cuales son las implementaciones "default" que se van a usar. Tampoco me queda claro si esto se puede usar con interfaces y clases que no sean de… Read more »
Si en principio no debieras tener problemas ya que pertenece al core de Java y se aplica a todo.
Hola Cecilio, no sé si se entendió lo que puse, pero te pongo un ejemplo.
Supongamos que yo tengo
MiServicio –> interface
MiServicioImpl –> implementacion de la anterior
podría hacer algo como esto?
List[MiServicio] servicios = new ArrayList[]();
No 🙂 .Vamos no lo he probado en concreto pero date cuenta que java no sabría que tipo de dato es la clase .Asi que me temo que no es posible. El operador diamante se puede usar para tipos concretos no para interfaces o abstracciones
Cecilio, vas a postear sobre lamdbas?
Gracias
En algún momento he pensado sobre el tema pero al ser Java 8 voy a esperar un poquito mas 🙂