gpt4 book ai didi

java - 的意义? java中的模板参数

转载 作者:行者123 更新时间:2023-12-02 06:35:31 24 4
gpt4 key购买 nike

我在生产java代码中很多时候注意到,使用

Collection< ? extends foo> var

我的问题是不

Collection<foo> var 

意思是一样的。两者之间的语义差异是什么?

谢谢!

最佳答案

假设我们有一个方法

void foo(List<Parent> bar)

我们想传递它List<Child> ,不幸的是我们不能。如果Foo,通用容器不是“协变”的是 Bar 的子类型然后List<Foo>不是 List<Bar> 的子类型,它们是不变的。为了解决这个问题,我们使用通配符。

如果我们声明我们的方法

void foo(List<? extends Parent> bar)

现在我们可以向它传递 List<Child>List<Parent> 。通配符 extends给我们协方差。

双重地,如果我们想传递 Child 的对象列表是 的子类型,那么我们可以这样做

void foo(List<? super Child>)

并传递一个List<Parent> 。这就是“逆变”,就像协方差一样,但失败了。

这是一个有点令人困惑的主题,但差异的要点是允许集合具有与其参数相同的子类型和父类(super class)型。

关于java - 的意义? java中的模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19695844/

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