将List <t>转换为List <string>类型

时间:2016-10-28 18:50:06

标签: java string list arraylist casting

我正在投射List&lt; T&gt;列出&lt; String&gt;。 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

1 个答案:

答案 0 :(得分:1)

Java泛型并不总是按照您期望的方式工作。

具体来说,将泛型转换为特定类型实际上并不会更改对象,并且当您执行此操作时可能会得到不安全的结果,并且不能100%确定您是否正确。

因此,您投射到List<String>的对象实际上仍然是包含BigDecimal条目的列表,您只是误导了它。

这是Java类型不安全的情况 - 正如将Object强制转换为Integer类型不安全(但在运行时,不安全ObjectInteger演员阵容在演员表演时会失败,而通用演员阵容在以后才会失败。)