Operador Java Diamond:simplifique los genéricos en Java 7+
Operador Diamante Java
El operador diamante se introdujo en Java 7 para hacer que el código sea más legible para los genéricos. Un genérico es un tipo de argumento. Usando genérico podemos pasar cualquier tipo de objeto para que sea procesado por los métodos de clase. Por ejemplo, si estamos creando una lista de cadenas antes de Java 7, entonces debemos usar la siguiente sintaxis para crear una instancia de una lista de cadenas con un objeto ArrayList.
List<String> listOfStrings = new ArrayList<String>();
Desde Java 7 en adelante, podemos usar el operador diamante para simplificar la sintaxis anterior de la siguiente manera:
List<String> listOfStrings = new ArrayList<>();
Pero no se puede utilizar con clases internas anónimas. Por ejemplo, no podemos omitir el tipo de objeto del operador diamante en la sintaxis siguiente antes de Java 9.
Handler<Integer> intHandler = new Handler<Integer>(1) {
@Override
public void handle() {
System.out.println(content);
}
};
Operador de diamantes en clase anónima
En Java 9, el operador diamante también se puede utilizar con una clase anónima para simplificar el código y mejorar la legibilidad.
Handler<Integer> intHandler = new Handler<>(1) {
@Override
public void handle() {
System.out.println(content);
}
};
Operador Diamante en Java 7, Java 8
En el siguiente ejemplo, hemos creado clases anónimas para un controlador de clase abstracta que acepta un argumento genérico y pasa el tipo de objeto mientras creamos la clase anónima, ya que tenemos que pasar el argumento de tipo, de lo contrario el programa no se compilará.
Ejemplo
public class Tester {
public static void main(String[] args) {
// create an Anonymous class to handle 1
// Here we need to pass Type arguments in diamond operator
// before Java 9 otherwise compiler will complain error
Handler<Integer> intHandler = new Handler<Integer>(1) {
@Override
public void handle() {
System.out.println(content);
}
};
intHandler.handle();
// create an Anonymous class to handle 2
Handler<? extends Number> intHandler1 = new Handler<Number>(2) {
@Override
public void handle() {
System.out.println(content);
}
};
intHandler1.handle();
Handler<?> handler = new Handler<Object>("test") {
@Override
public void handle() {
System.out.println(content);
}
};
handler.handle();
}
}
abstract class Handler<T> {
public T content;
public Handler(T content) {
this.content = content;
}
abstract void handle();
}
Salida
Compilemos y ejecutemos el programa anterior, esto producirá el siguiente resultado:
1 2 Test
Operador Diamond Java 9 en adelante
Con Java 9, podemos usar el operador <> con una clase anónima como se muestra a continuación.
Ejemplo
En el siguiente ejemplo, hemos creado clases anónimas para un controlador de clase abstracta que acepta un argumento genérico pero sin el tipo de objeto mientras creamos la clase anónima, ya que no necesitamos pasar el argumento de tipo. El compilador infiere el tipo en sí.
public class Tester {
public static void main(String[] args) {
// create an Anonymous class to handle 1
// Here we do not need to pass Type arguments in diamond operator
// as Java 9 compiler can infer the type automatically
Handler<Integer> intHandler = new Handler<>(1) {
@Override
public void handle() {
System.out.println(content);
}
};
intHandler.handle();
Handler<? extends Number> intHandler1 = new Handler<>(2) {
@Override
public void handle() {
System.out.println(content);
}
};
intHandler1.handle();
Handler<?> handler = new Handler<>("test") {
@Override
public void handle() {
System.out.println(content);
}
};
handler.handle();
}
}
abstract class Handler<T> {
public T content;
public Handler(T content) {
this.content = content;
}
abstract void handle();
}
Salida
Compilemos y ejecutemos el programa anterior, esto producirá el siguiente resultado:
1 2 Test
Java
- Método Java String contains() | Comprobar subcadena con ejemplo
- Clase anónima de Java
- Mapa de árbol de Java
- Java 8 - Base64
- Matrices de copia de Java
- Clase de pila de Java
- Clase de lector de Java
- JVM | ¿Qué es Java Virtual Machine y su arquitectura?
- Modificadores de acceso Java
- Declaración de cambio de Java
- Conjunto de árbol de Java