泛型的学习

文章目录

泛型

泛型的概念

  1. 所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时
  2. 从JDK1.5以后,Java引入了"参数化类型(Parameterized type)"的概念,允许我们在创建集合时再指定集合元素的类型,正如:List,这表明该List只能保存字符串类型的对象。
  3. JDK1.5改写了集合框架中的全部接口和类,为这些接口、类增加了泛型支持,从而可以在声明集合变量、创建集合对象时传入类型实参

在集合中使用泛型

  1. 集合接口或集合类在jdk5.0时都修改为带泛型的结构
  2. 在实例化集合类时,可以指明具体的泛型
  3. 指明完以后,在集合类或接口中凡是定义类或接口时,内部结构使用到类的泛型的位置,都指定为实例化的泛型类型 比如:add(E e) --->实例化后 add(Integer e)
  4. 注意点:泛型的类型必须是类,不能是基本数据类型,需要用到基本数据类型的位置,呐包装类替换
  5. 如果实例化时,没有指明泛型的类型.默认为java.lang.Object类型

自定义泛型结构

  • 关于自定义泛型类,泛型接口
  1. 如果实例化时,没有指明泛型的类型.默认为java.lang.Object类型
  2. 要求:如果大家定义类类是带泛型的,建议在实例化时要指明类的泛型
  3. 建议:实例化时指明类的泛型
  4. 由于子类在继承带泛型的父类时,指明了泛型的类型,则实例化子类对象时,不再需要指明泛型
java 复制代码
 @Test
    public void Test1(){
        
        Order order=new Order();
        order.setOrderT(123);
        order.setOrderT("ABC");

        
        Order<String> order1=new Order<String>("orderAA",1001,"ORDER" );
        order1.setOrderT("orderBB");
    }

泛型在继承上的体现

  • 如果B是A的一个子类型(子类或者子接口),而G是具有泛型声明的类或接口,G并不是G的子类型
java 复制代码
public void testGenericAndSubClass() {
Person[] persons = null;
Man[] mans = null;
// 而 Person[] 是 Man[] 的父类.
persons = mans;
Person p = mans[0];
// 在泛型的集合上
List<Person> personList = null;
List<Man> manList = null;
// personList = manList;(报错)
}

通配符的使用

复制代码
1. 使用类型通配符:?
  1. 写入list中的元素时,不行。因为我们不知道c的元素类型,我们不能向其中
    添加对象。唯一的例外是null,它是所有类型的成员。
  2. 有限制条件的通配符的使用
    • ? extends A:
      G<? extends A>可以作为G和G的父类的,其中B是A的子类
    • ? super A:
      G<? super A>可以作为G和G的父类的,其中B是A的父类
  3. 通配符指定上限
    上限extends:使用时指定的类型必须是继承某个类,或者实现某个接口,即<=
  4. 通配符指定下限
    下限super:使用时指定的类型不能小于操作的类,即>=
相关推荐
xiaobai1783 小时前
测试工程师入门AI技术 - 前序:跨越焦虑,从优势出发开启学习之旅
人工智能·学习
北岛寒沫3 小时前
北京大学国家发展研究院 经济学原理课程笔记(第二十一课 金融学基础)
经验分享·笔记·学习
扑火的小飞蛾4 小时前
网络安全小白学习路线图 (基于提供文档库)
学习·安全·web安全
优雅的潮叭4 小时前
c++ 学习笔记之 malloc
c++·笔记·学习
薛不痒5 小时前
深度学习之优化模型(数据预处理,数据增强,调整学习率)
深度学习·学习
昵称已被吞噬~‘(*@﹏@*)’~6 小时前
【RL+空战】学习记录03:基于JSBSim构造简易空空导弹模型,并结合python接口调用测试
开发语言·人工智能·python·学习·深度强化学习·jsbsim·空战
我想我不够好。6 小时前
学到的知识点 1.8
学习
旖旎夜光7 小时前
Linux(9)
linux·学习
浩瀚地学7 小时前
【Java】常用API(二)
java·开发语言·经验分享·笔记·学习
chao_6666668 小时前
解决 PowerShell 中文乱码问题
网络·学习·powershell