java - Java 中的泛型类型转换与参数化类型转换

标签 java generics casting

最佳答案

f1由于类型删除而起作用。投到E[]在运行时被完全删除,这意味着你的代码在运行时会表现得像这样,但它确实让编译器推断你正在返回 List<E>而不是 List<Object> ,因此让程序编译。

static List f1(List list) {
  return List.of(list.toArray());
}
f2由于基本相同的原因而起作用。这次是List.of(list.toArray())的结果推断为 List<Object>因为 toArray返回 Object[] ,但后来被删除的类型转换使它编译。
f1a有一个 ClassCastException因为你想转 Object[]String[] .在 Java 中,数组甚至在运行时都知道它们声明的类型,因此 toArray 返回的数组认为自己是一个 Object[]即使它真的只持有字符串并且不喜欢变成 String[] .f2a不起作用,因为您无法转动 List<Object>List<String> .
如果要将列表转换为字符串数组,请尝试 list.toArray(new String[0]) .这样,它将返回一个正确的 String[]并且不会引起问题。
如果您转换 List<Object>List<String> ,使用 (List) List.of(list.toArray()) 转换为原始类型

相关文章:

java - 如何通过反射获取 Hibernate 类的 Getter 和 Setter

java - 如何避免 libgdx SpriteBatch/BitmapFont 破坏 Texture.bind?

Java 字节码操作库建议

scala - null 作为类型参数的实例

Java 泛型 - 多次使用相同的通配符

datetime - 如何在 BigQuery SQL 中捕获失败的 CAST 语句?

c# - C#'s equivalent to VB.NET' s 直播

java - 将 LinkedHashMap 转换为复杂对象

java - 如何在 JodaTime 中创建几天的迭代器

java - 复杂和不同数据结构的通用方法