将 HashMap 列表转换为 String 列表时,Java 11 不会抛出 ClassCastException

Eha*_*sin 0 java java-11

在 Java 11 中运行此代码时,我期待 ClassCastExpection,但它执行时没有问题,这种情况有解释吗?

List<?> list = List.of(new HashMap<>());
List<String> listOfStrings = (List<String>) list;
System.out.println("List size: " + listOfStrings.size());
Run Code Online (Sandbox Code Playgroud)

Jor*_*orn 6

Java 泛型在运行时被擦除,因此无法检查强制转换。一旦您从结果列表中访问非字符串,您将收到 ClassCastException。这就是此代码生成未经检查的强制转换警告的原因。