Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Operador diamante de Java: Simplifique genéricos en Java 7+

Operador diamante de Java

El operador diamante se introdujo en Java 7 para hacer el código más legible para genéricos. Un genérico es un tipo de argumento. Usando genéricos podemos pasar cualquier tipo de objeto para ser procesado por los métodos de la clase. Por ejemplo, si estamos creando una lista de cadenas antes de Java 7, teníamos que usar la siguiente sintaxis para instanciar 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 podía usar con clases internas anónimas. Por ejemplo, no podemos omitir el tipo de objeto del operador diamante en la siguiente sintaxis antes de Java 9.

 Handler<Integer> intHandler = new Handler<Integer>(1) { @Override public void handle() { System.out.println(content); } }; 

Operador diamante en clase anónima

En Java 9, el operador diamante puede usarse con una clase anónima también para simplificar código y mejorar 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 una clase abstracta Handler que acepta un argumento genérico y pasamos el tipo de objeto al crear la clase anónima ya que tenemos que pasar el argumento de tipo de lo contrario el programa no compilará.

Ejemplo

 public class Tester { public static void main(String[] args) { // crear una clase anónima para manejar 1 // Aquí necesitamos pasar argumentos de tipo en el operador diamante // antes de Java 9 de lo contrario el compilador dará error Handler<Integer> intHandler = new Handler<Integer>(1) { @Override public void handle() { System.out.println(content); } }; intHandler.handle(); // crear una clase anónima para manejar 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 diamante Java 9 en adelante

Con Java 9, podemos usar el operador <> con clase anónima también como se muestra a continuación.

Ejemplo

En el siguiente ejemplo, hemos creado clases anónimas para una clase abstracta Handler que acepta un argumento genérico pero sin el tipo de objeto al crear la clase anónima ya que no necesitamos pasar el argumento de tipo. El compilador infiere el tipo automáticamente.

 public class Tester { public static void main(String[] args) { // crear una clase anónima para manejar 1 // Aquí no necesitamos pasar argumentos de tipo en el operador diamante // ya que el compilador de Java 9 puede inferir el tipo automáticamente 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

  1. Java 8 Streams: Enfoque Declarativo para Procesamiento de Datos
  2. Top 50 Preguntas y Respuestas de Entrevista Kotlin (2026)
  3. Java explicado: Definición, características, visión general de la plataforma y versiones
  4. Dominando la Interfaz Iterator de Java: Guía Práctica con Ejemplo de Código
  5. Dominando representaciones String en Enums de Java
  6. Dominando Enums en Java: Guía completa de Enums y Clases Enum
  7. Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
  8. Dominar Referencias a Métodos en Java 8: Guía Completa
  9. Serialización de Objetos en Java: Persistencia y Restauración de Objetos
  10. Encapsulamiento en Java: Guía completa con ejemplo práctico
  11. Dominar Interfaces Funcionales en Java 8: Guía Completa