泛型引用的传递

主要记录个人对<? extends T>,<? super T>的理解和使用

接下来均以ArrayList为例。

本文所总结的均为编译层面上的规则。

第一个问题:引用间的赋值

  • 4种泛型引用
    1.空引用ArrayList<>,ArrayList
    2.一般引用,即指定具体的泛型 ArrayList,ArrayList
    3.ArrayList<? extends A>
    4.ArrayList<? super A>

这4种引用能否相互赋值的规则通过代码可以看出:(相同引用可以随便赋)
其中A是B的父类
在这里插入图片描述
在这里插入图片描述

第二个问题:对于上述四种引用,其方法的调用问题

  • 方法的种类
    1.方法的形参中有类型为指定泛型的。例如ArrayList的add方法,以下简称一号方法
    2.方法的返回值类型为指定泛型的。例如ArrayList的get方法,以下简称二号方法

  • 四种引用种类对应的解决

  • 空引用
    一号方法中类型是泛型的参数可以传入任意对象(所有对象都是Object类或者子类)。
    二号方法中返回值接收时指定的变量引用必定指定为Object,否则编译失败。
    在这里插入图片描述

  • 一般引用
    一号方法中类型是泛型的参数可以传入任意指定泛型类或者指定泛型类子类对象。
    二号方法中返回值接收时指定的变量引用必定指定为指定的泛型类或者指定泛型类父类,否则编译失败。
    (这就是最一般的使用)

  • <? extends T>

一号方法无论传入任何类型对象均编译失败
二号方法中返回值接收时指定的变量引用必定指定为T或者T父类,否则编译失败
在这里插入图片描述

  • <? super T>

一号方法中类型是泛型的参数可以传入T类或者T类子类对象。
二号方法中返回值接收时指定的变量引用必定指定Object类,否则编译失败
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值