我正在投射List< T>列出< String>。 list的任何元素的getClass()方法返回List的实际元素类,即而不是String。不应该Java返回String而不是实际的类,因为列表被转换为String列表?
public cast (List<?> unsortedList) {
List<String> unsortedListOfPrimitives = (List<String>)unsortedList;
System.out.println(unsortedListOfPrimitives.get(0).getClass());
}
cast(List<BigDecimal> unsortedList);
Output : java.math.BigDecimal
答案 0 :(得分:1)
Java泛型并不总是按照您期望的方式工作。
具体来说,将泛型转换为特定类型实际上并不会更改对象,并且当您执行此操作时可能会得到不安全的结果,并且不能100%确定您是否正确。
因此,您投射到List<String>
的对象实际上仍然是包含BigDecimal
条目的列表,您只是误导了它。
这是Java类型不安全的情况 - 正如将Object
强制转换为Integer
类型不安全(但在运行时,不安全Object
到Integer
演员阵容在演员表演时会失败,而通用演员阵容在以后才会失败。)