gpt4 book ai didi

java - Collection 与集合

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:23 24 4
gpt4 key购买 nike

在尝试理解 Spring MVC 中的概念之后,我遇到了表达式 Collection<? extends Book>我以前从未见过。我试图自己弄清楚,但我发现使用 Collection<? extends Book> 没有区别。和 Collection<Book> .我猜它只允许 Book 的扩展,但它也允许 Book。所以从头开始。我试过使用谷歌,但自从?是谷歌中的通配符,它​​几乎不可能搜索到。我已经在 stackoverflow 上搜索了答案,但是关于这个的所有问题(例如 List<? extends MyType><? extends > Java syntax )都已经假定知道 Collection<? extends T> .下面是最初引起我兴趣的代码:

import java.util.ArrayList;
import java.util.Collection;

public class Book {
public static void main(String[] args) {
BookCase bookCase1 = new BookCase();
BookCase bookCase2 = new BookCase(bookCase1);
}
}

class BookCase extends ArrayList<Book> {
public BookCase() {
}

//acts same as public BookCase(Collection<Book> c) {
public BookCase(Collection<? extends Book> c) {
super(c);
}
}

什么是<? extends T>做?它与 <T> 有何不同? ?

编辑:

后续问题:BookCase extends ArrayList<Book>意思是BookCase延伸Book

最佳答案

考虑以下问题

class Animal { }
class Horse extends Animal { }

private static void specific(List<Animal> param) { }
private static void wildcard(List<? extends Animal> param) { }

如果没有扩展语法,您只能在签名中使用确切的类

    specific(new ArrayList<Horse>()); // <== compiler error

通过通配符扩展,您可以允许 Animal 的任何子类

    wildcard(new ArrayList<Horse>());  // <== OK

通常使用 ?扩展语法,因为它使您的代码更具可重用性和面向 future 。

关于java - Collection <?扩展 T> 与集合 <T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28464614/

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