java - "? extends A"的目的是什么?

标签 java generics

<分区>

如果我有这样一个列表:

static ArrayList<? extends A> list = new ArrayList<A>();

的意义何在?扩展 A?这是否意味着我正在制作一个仅包含必须从 A 继承的子类的列表?

通常我是这样做的:

static ArrayList<A> list = new ArrayList<A>();

最佳答案

extends 关键字意味着该关键字左侧的类将使用右侧类中的所有方法和属性。 ? 不会在那里。一些名字会是。类的名称。

static ArrayList<? extends A> list = new ArrayList<A>();

在上面的代码中,您正在创建一个新的 ArrayList 对象,它使用(实现/扩展)类 A 作为其方法和属性,但实际上不是A

static ArrayList<A> list = new ArrayList<A>();

而在您通常使用的第二个代码中,您实际上是在创建一个真正使用类 A 的对象。

在 Java 中,我们称之为继承,其中一个类继承了另一个类的所有属性和功能。

http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

关于java - "? extends A"的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23852841/

相关文章:

java - 使用 instanceof 与将 isSomething() 添加到基类

Java正则表达式使表达式匹配a) b) c) d)

java - 为什么这个类型需要显式强制转换?

generics - 如何使用显式类型参数实例化通用记录?

c# - 为什么 C# 中的这种隐式类型转换会失败?

swift - 如何在 Swift 中实现管理 UserDefaults 的键值对的通用结构?

java - 从网站下载多个图像并将它们保存在sqlite中

java - Spring Cloud Zuul CircuitBreaker 所有路由均通过 TurbineStream 而不是 Turbine-AMQP

java - Netbeans 的 Eclipse Web 服务资源管理器的替代方案

.net - List<T>.Contains() 很慢?