Unchecked Cast en Java

Rupam Yadav 12 octubre 2023
  1. ¿Qué es la advertencia de unchecked cast en Java?
  2. Ignore las advertencias mediante @SuppressWarnings
Unchecked Cast en Java

Java es un lenguaje de programación que aplica la seguridad de tipos, lo que significa que siempre debemos especificar el tipo de datos que vamos a almacenar o usar y no podemos almacenar tipos incompatibles en ellos.

Por ejemplo, no podemos almacenar un valor entero en una cadena y el compilador arrojará un error o una advertencia. Una de las advertencias relacionadas con los tipos de datos es la transmisión sin marcar.

¿Qué es la advertencia de unchecked cast en Java?

La advertencia de conversión sin marcar se produce cuando probamos un tipo sin formato con un tipo parametrizado sin comprobar su tipo. Java no fomenta este método porque un tipo parametrizado está restringido a un tipo especificado únicamente.

Uno de los tipos parametrizados en Java es HashMap, que toma dos parámetros, el tipo key y el tipo value. En el código de ejemplo a continuación, creamos un objeto de HashMap llamado rawMap y ponemos algunos valores con sus claves en él.

Cuando compilamos este programa, aparecen algunas advertencias, como las que se muestran a continuación. Las dos primeras advertencias se producen porque utilizamos las clases parametrizadas Map y HashMap como sin formato.

Las últimas tres advertencias son para cada instrucción put individual en el programa porque colocamos valores sin especificar sus tipos o verificar el tipo; por lo tanto, se acerca la advertencia de lanzamiento sin control.

import java.util.HashMap;
import java.util.Map;

public class Main {
  public static void main(String[] args) {
    Map rawMap = new HashMap();
    rawMap.put("key1", "String1");
    rawMap.put("key2", "String2");
    rawMap.put("key3", "String3");

    System.out.println(rawMap);
  }
}

Producción :

{key1=String1, key2=String2, key3=String3}

Advertencias:

Raw use of parameterized class 'Map'
Raw use of parameterized class 'HashMap'
Unchecked call to 'put(K, V)' as a member of raw type 'java.util.Map'
Unchecked call to 'put(K, V)' as a member of raw type 'java.util.Map'
Unchecked call to 'put(K, V)' as a member of raw type 'java.util.Map'

Ahora que conocemos el problema real, podemos discutir las soluciones o soluciones a este problema.

Ignore las advertencias mediante @SuppressWarnings

Podemos usar la anotación @SupressWarnings si queremos ignorar las advertencias. Esta es una buena solución, pero solo cuando sabemos que no habrá problemas con esta advertencia en el futuro.

Para utilizar esta anotación, hemos pasado la advertencia que queremos suprimir, que está unchecked. Usamos esta anotación en la función desde la que se genera la advertencia.

A continuación se muestra el mismo programa que vemos en el ejemplo anterior, pero usamos la anotación @SuppressWarnings en la función main() y pasamos unchecked en ella. Observe que el HashMap todavía se usa como un tipo sin formato, pero las advertencias desaparecen cuando lo compilamos.

import java.util.HashMap;
import java.util.Map;

public class Main {
  @SuppressWarnings("unchecked")
  public static void main(String[] args) {
    Map rawMap = new HashMap();
    rawMap.put("key1", "String1");
    rawMap.put("key2", "String2");
    rawMap.put("key3", "String3");

    System.out.println(rawMap);
  }
}

Producción :

{key1=String1, key2=String2, key3=String3}

Advertencias:

Raw use of parameterized class 'Map'
Raw use of parameterized class 'HashMap'

Otra solución obvia a este problema es utilizar el tipo parametrizado HashMap como se supone que debe ser. En el siguiente ejemplo, especificamos el tipo y valor de la clave en el HashMap, y las advertencias desaparecen.

import java.util.HashMap;
import java.util.Map;

public class Main {
  public static void main(String[] args) {
    Map<String, String> rawMap = new HashMap<>();
    rawMap.put("key1", "String1");
    rawMap.put("key2", "String2");
    rawMap.put("key3", "String3");

    System.out.println(rawMap);
  }
}

Producción :

{key1=String1, key2=String2, key3=String3}
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn