Java 7 introdujo el @SafeVarargs anotación para suprimir las advertencias de operaciones inseguras que ocurren cuando un método tiene varargs (número variable de argumentos). La anotación @SafeVarargs solo se puede usar con métodos (constructores o métodos finales o estáticos) que no se pueden anular porque un método de anulación aún puede realizar operaciones inseguras en sus varargs (número variable de argumentos).

Java 9 ha extendido el uso de la anotación @SafeVarargs, ahora también se puede usar con métodos privados. Esto se debe a que los métodos privados no se pueden anular. Anteriormente, esta anotación se limitaba a métodos o constructores finales o estáticos, pero ahora se puede usar con métodos privados.

Ejemplo de Java 9: ​​¿Cuándo no usamos la anotación @SafeVarargs?

import java.util.ArrayList;  
import java.util.List;  
public class JavaExample{  
    // We are not using @SafeVarargs annotation - Java 9
    private void print(List... names) {  
        for (List<String> name : names) {  
            System.out.println(name);  
        }  
    }  
    public static void main(String[] args) {  
        JavaExample obj = new JavaExample();  
        List<String> list = new ArrayList<String>();  
        list.add("Kevin");  
        list.add("Rick"); 
        list.add("Negan");
        obj.print(list);  
    }     
}

Advertencias:

Type safety: Potential heap pollution via varargs parameter names
Type safety: A generic array of List is created for a varargs 
 parameter

Producción:

[Kevin, Rick, Negan]

Como puede ver, el código funcionó bien pero produjo pocas advertencias.

Captura de pantalla de este código en Eclipse Oxygen IDE que muestra advertencias.
Anotación Java 9 @SafeVarargs

Java 9 – Ejemplo de anotación @SafeVarargs

Ejecutemos el mismo código nuevamente después de usar la anotación @SafeVarargs.

import java.util.ArrayList;  
import java.util.List;  
public class JavaExample{  
    @SafeVarargs
    private void print(List... names) {  
        for (List<String> name : names) {  
            System.out.println(name);  
        }  
    }  
    public static void main(String[] args) {  
        JavaExample obj = new JavaExample();  
        List<String> list = new ArrayList<String>();  
        list.add("Kevin");  
        list.add("Rick"); 
        list.add("Negan");
        obj.print(list);  
    }      
}

La misma salida sin previo aviso.

leer  Java 9: ​​métodos de fábrica para crear mapas inmutables

Nota: Si intenta compilar el código anterior en Java 7 y Java 8, obtendrá un error de compilación ya que estas mejoras se realizan en Java 9, antes de java 9: ​​los métodos privados no se pueden marcar con esta anotación.

Por avivcas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *