Unchecked Cast en Java
- ¿Qué es la advertencia de unchecked cast en Java?
-
Ignore las advertencias mediante
@SuppressWarnings
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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn