代码之家  ›  专栏  ›  技术社区  ›  Landon Kuhn

Java:CAST集合类型到子类型[复制]

  •  34
  • Landon Kuhn  · 技术社区  · 15 年前

    假设类 B 扩展类 A . 我有一个 List<A> 我碰巧知道 只有 包含的实例 . 有什么方法可以让我 A & T; 到A List<B> 是吗?

    似乎我唯一的选择是迭代集合,一次强制一个元素,创建一个新的集合。这似乎是对给定类型的擦除资源的彻底浪费,这在运行时是完全不必要的。

    4 回复  |  直到 12 年前
        1
  •  44
  •   jarnbjo    15 年前

    您可以通过非类型化列表界面强制转换:

    List<A> a = new ArrayList<A>();
    List<B> b = (List)a;
    
        2
  •  15
  •   Romain    14 年前

    您可以尝试以下操作:

    List<A> a = new ArrayList<A>();
    List<B> b = (List<B>) (List<?>) a;
    

    它基于jarnbjo的答案,但不使用原始列表。

        3
  •  1
  •   Joachim Sauer    15 年前

    List<A> 的子类型 List<B> 你说什么?

    The JLS even mentions that explicitly :

    子类型不通过泛型类型扩展: T <: U 并不意味着 C<T> <: C<U> .

        4
  •  1
  •   zakmck    12 年前

    保持某种类型安全性对性能影响最小的一种方法是使用 wrapper . 这个例子是关于集合的,列表案例会非常相似,也许有一天我也会这样写。如果有人在我前面,请让我们分享代码。