Snailclimb / Snailclimb/JavaGuide

泛型之常用的通配符有哪些?

未关闭
#1,692 2 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

perfect content
主要语言
JavaScript
星标
159k
派生
46.1k
平均合并
14 小时 36 分钟
30 天内合并 PR
6

描述

常用的通配符为: T,E,K,V,?
? 表示不确定的 Java 类型
T (type) 表示具体的一个 Java 类型
K V (key value) 分别代表 Java 键值中的 Key Value
E (element) 代表 Element

上面说的 T、E、K、V 其实都只是类型参数。而 ? 才是通配符,而且准确来说,是无限定通配符。

通配符分为有限定通配符,无限定通配符,超类型通配符。

有限定通配符:形式类似于 <? extends E>,E 如果为类,只有传入的类型参数为 E 的本身及子类才可以使用,E 如果为接口,则必须实现该接口,只能读不能写,可以用类型参数替代。

  public void addAll(DynamicArray<? extends E> array) {

 }

无限定通配符:形式为 <?>,都可以使用,只能读不能写,可以用类型参数替代。

  public void addAll(DynamicArray<?> array) {
 
 }

超类型通配符:形式为 <? super E>,可以实现对象往父类型写入,不可以用类型参数替代。

   public void copyTo(DynamicArray<? super E> dest) {

    }

简单总结
其中有限定通配符和无限定通配符只能读不能写,可以被类型参数替代。而超类型通配符可以使用对象往父类型写入,不可以用类型参数替代。

有限定通配符和无限定通配符既然能被类型参数替换,该如何选择使用的?
应该根据使用场景:

  1. 需要写入的,必须使用类型参数。
  2. 只需要读的,优先使用通配符,通配符让代码看起来更简单。

贡献指南

这个仓库没有索引到贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

未指定文件或测试。首先在仓库中定位 Java 泛型或通配符文档,然后根据相邻指南检查 issue 中的说明和示例。确定预期范围并使相关文档准确解释有界、无界和下界通配符后,即视为完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
java
领域
documentation
Issue 类型
文档
难度
3/5
预计耗时
1-2 天
活跃度
停滞
描述清晰度
需要澄清
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。