Ungeprüftes Casting in Java
Java ist eine Programmiersprache, die Typsicherheit erzwingt, was bedeutet, dass wir immer den Datentyp angeben sollten, den wir speichern oder verwenden werden, und in ihnen keine inkompatiblen Typen speichern können.
Wir können beispielsweise keinen Integer-Wert in einem String speichern, und der Compiler gibt einen Fehler oder eine Warnung aus. Eine der Warnungen in Bezug auf Datentypen ist ungeprüfte Umwandlung.
Was ist die ungeprüfte Cast-Warnung in Java?
Die unchecked Cast-Warnung tritt auf, wenn wir einen Rohtyp in einen parametrisierten Typ umwandeln, ohne seinen Typ zu überprüfen. Java unterstützt diese Methode nicht, da ein parametrisierter Typ nur auf einen angegebenen Typ beschränkt ist.
Einer der parametrisierten Typen in Java ist HashMap
, der zwei Parameter verwendet, den key
-Typ und den value
-Typ. Im folgenden Beispielcode erstellen wir ein Objekt von HashMap
namens rawMap
und fügen einige Werte mit ihren Schlüsseln darin ein.
Wenn wir dieses Programm kompilieren, werden einige Warnungen angezeigt, wie die unten gezeigten. Die ersten beiden Warnungen treten auf, weil wir die parametrisierten Klassen Map
und HashMap
als Rohdaten verwenden.
Die letzten drei Warnungen gelten für jede einzelne put
-Anweisung im Programm, da wir Werte eingeben, ohne ihren Typ anzugeben oder den Typ zu überprüfen; Daher wird die ungeprüfte Besetzungswarnung angezeigt.
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);
}
}
Ausgabe:
{key1=String1, key2=String2, key3=String3}
Warnungen:
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'
Da wir nun das eigentliche Problem kennen, können wir die Lösungen oder Problemumgehungen für dieses Problem besprechen.
Ignorieren Sie die Warnungen mit @SuppressWarnings
Wir können die Annotation @SupressWarnings
verwenden, wenn wir die Warnungen ignorieren möchten. Dies ist eine gute Lösung, aber nur, wenn wir wissen, dass es in Zukunft keine Probleme mit dieser Warnung geben wird.
Um diese Annotation zu verwenden, haben wir die Warnung übergeben, die wir unterdrücken möchten, die unchecked
ist. Wir verwenden diese Annotation für die Funktion, von der die Warnung generiert wird.
Unten ist das gleiche Programm, das wir im vorherigen Beispiel sehen, aber wir verwenden die Annotation @SuppressWarnings
für die Funktion main()
und übergeben darin “unchecked”. Beachten Sie, dass die HashMap
immer noch als Rohtyp verwendet wird, aber die Warnungen sind weg, wenn wir sie kompilieren.
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);
}
}
Ausgabe:
{key1=String1, key2=String2, key3=String3}
Warnungen:
Raw use of parameterized class 'Map'
Raw use of parameterized class 'HashMap'
Eine andere naheliegende Lösung für dieses Problem ist die Verwendung des parametrisierten Typs HashMap
, wie er sein soll. Im folgenden Beispiel geben wir Typ und Wert des Schlüssels in der HashMap
an und die Warnungen sind weg.
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);
}
}
Ausgabe:
{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