Das Verständnis der Typsicherheit bei Generics
Generics bieten Typsicherheit, indem gewährleistet wird, dass wir nur einen einzigen Objekttyp gleichzeitig verwenden. Im folgenden Codeblock werden wir eine ArrayList
von ganzen Zahlen erstellen, ohne ihren Typparameter zu definieren. Es ist eine schlechte Praxis, Generics ohne Typparameter zu verwenden. Der Code wird kompilieren, aber es wird ein Laufzeitfehler zurückgegeben, wenn wir versuchen, Elemente anderer Typen zuzugreifen.
// ~/project/Main.java
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList integerList = new ArrayList();
integerList.add(1);
integerList.add(2);
integerList.add(3);
integerList.add("Hello World");
for (Object element : integerList) {
System.out.println((Integer)element);
}
}
}
Um den Code auszuführen, öffnen Sie das Terminal und navigieren Sie zum Verzeichnis ~/project
. Kompilieren Sie den Code mit dem folgenden Befehl:
javac Main.java
Nach erfolgreicher Kompilierung führen Sie den Code mit dem folgenden Befehl aus:
java Main
Die Ausgabe des Codes wird sein:
1
2
3
Exception in thread "main" java.lang.ClassCastException: java.base/java.lang.String cannot be cast to java.base/java.lang.Integer
at Main.main(Main.java:13)
Wir erhalten einen Laufzeitfehler, weil die integerList
Elemente vom Typ Integer und vom Typ String enthält. Dies liegt daran, dass wir den Typparameter nicht beim Erstellen der integerList
definiert haben.