gpt4 book ai didi

java - 参数化类型的未经检查的强制转换警告

转载 作者:行者123 更新时间:2023-12-02 02:47:37 26 4
gpt4 key购买 nike

我正在阅读 Java 教程中有关泛型的限制,特别是 casting with parameterized types 。我理解所提供的示例。但是,我不确定以下示例:

List<? extends Number> l1 = new ArrayList<Integer>();
// unchecked cast warning
ArrayList<Number> l2 = (ArrayList<Number>) l1;
// no unchecked cast warning
ArrayList<? extends Number> l3 = (ArrayList<? extends Number>) l1;

我明白为什么在第一种情况下会出现警告。为什么第二种情况没有警告?是因为我只能对 l3 执行操作吗?是否安全(例如,我无法将 Float 添加到列表中)?

<小时/>

更新:以下是 section 5.5.2 of the JLS 的摘录解决了类似的问题。

A cast from a type S to a parameterized type (§4.5) T is unchecked unless at least one of the following is true:

  • S <: T
  • All of the type arguments (§4.5.1) of T are unbounded wildcards
  • T <: S and S has no subtype X other than T where the type arguments of X are not contained in the type arguments of T.

最佳答案

没有警告,因为强制转换不会更改类型的通用部分。 List<? extends Number>ArrayList<? extends Number>具有相同类型的参数。相反,该转换是来自 List 的检查转换。至ArrayList .

关于java - 参数化类型的未经检查的强制转换警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44358152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com