前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >List集合中泛型使用细节

List集合中泛型使用细节

作者头像
暴躁的程序猿
发布2022-03-23 20:02:42
9070
发布2022-03-23 20:02:42
举报
文章被收录于专栏:阿飞的学习记录

list泛型类型

我们来看一段代码

代码语言:javascript
复制
 public void test(){
        Object o=null;
        String str1=null;
        //多态表现   父类的引用接收子类的对象
        o=str1;
    }

但是下面这样的代码是不能赋值的

代码语言:javascript
复制
 public void test(){
        List<Object> list1=null;
        List<String> list2=null;
        //此时list1和list2不具有子父类关系
        list1=list2;
    }
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我们可以看到 需要的是Object 传的是一个String 这种情况我们使用时候是需要注意的 但是有一种情况是可以的

代码语言:javascript
复制
 //但是这种情况是可以的  泛型相同 多态的表现
        List<String> list3=null;
        ArrayList<String> list4=null;
        list3=list4;
        //相当于 这样
        List<String> list5=new ArrayList<String>();

这样是可以的相当于 多态的表现

List泛型使用通配符 ?

我们使用?通配符的时候 这样赋值可以

代码语言:javascript
复制
  public void List1() {
        List<String> list1 = new ArrayList<>();
        List<?> list=new ArrayList<>();
        list1.add("111");
        //这样赋值是可以的
        list=list1;
    }

但是我们使用add、get方法时

代码语言:javascript
复制
  public void List1() {
        List<String> list1 = new ArrayList<>();
        List<?> list=new ArrayList<>();
        list1.add("111");
        //这样赋值是可以的
        list=list1;
        //对于List<?>就不能向其内部添加数据
        //但是不可以添加数据  除了添加  null
        list.add("1");
        //可以读取数据
        list.get(0);
    }

可以看到是有错误的 不能添加数据

在这里插入图片描述
在这里插入图片描述

但是有一个特例 添加null是可以添加的

代码语言:javascript
复制
 public void List1() {
        List<String> list1 = new ArrayList<>();
        List<?> list=new ArrayList<>();
        list1.add("111");
        //这样赋值是可以的
        list=list1;
        //对于List<?>就不能向其内部添加数据
        //但是不可以添加数据  除了添加  null
        list.add("1");
        //null可以
        list.add(null);
        //可以读取数据
        list.get(0);
    }
在这里插入图片描述
在这里插入图片描述

List泛型使用 有限制条件的通配符的使用

? extents Person ? super Person

创建两个类演示

代码语言:javascript
复制
/**
 * @create: 2021/10/2
 * @author: Tony Stark
 */
public class Person {
}
代码语言:javascript
复制
/**
 * @create: 2021/10/2
 * @author: Tony Stark
 */
public class Student extends Person {

}

我们创建集合使用泛型赋值测试

代码语言:javascript
复制
   public void Extent() {
        //必须赋值小于等于的类型
        List<? extends Person> list1 = null;
        //必须赋值大于等于
        List<? super Person> list2 = null;
        List<Student> list3 = null;
        List<Person> list4 = null;
        List<Object> list5=null;
        list1=list3;
        list1=list4;
        list1=list5;
        list2=list3;
        list2=list4;
        list2=list5;
    }

可以看到报错了

在这里插入图片描述
在这里插入图片描述

这里就要介绍一下范围的要求 ? extents Person 必须赋值小于等于person的类型 ? super Person 必须赋值大于等于person的类型

很明显我们上面list5是object类型大于了我们的list1要求小于等于persion 同理 list3是student不满足list2大于等于person的要求

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/10/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • list泛型类型
  • List泛型使用通配符 ?
  • List泛型使用 有限制条件的通配符的使用
  • ? extents Person ? super Person
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档