码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 泛型实例运用


    泛型两大特点: 类型约束 ,任意适配

    泛型可以用在已定义泛型的类中,用来约束需要传参的参数,例如在集合中规定泛型类型,从而避免参数类型需要向下转型(资源消耗)

    1. List list=new ArrayList();
    2. list.add(person);
    3. for (Object o : list) {
    4. Person person3=(Person) o;
    5. }
    6. List list2=new ArrayList<>();
    7. list2.add(1);
    8. list2.add(2);
    9. for (Integer integer : list2) {
    10. System.out.println(list2);
    11. }

    泛型就像在瓶子外面贴的标签,在编译器编译时候就会识别标签是什么,从而知道瓶子中应该装什么。 在我们自定义的类上加上泛型,可以实现任意适配的功能。

    1. public class generictest {
    2. public static void main(String[] args) {
    3. Person person=new Person<>(1);
    4. System.out.println(person.f());
    5. Person person1=new Person("good");
    6. System.out.println(person1.f());
    7. Person2 person2=new Person2("ABC");
    8. System.out.println(person2.f());
    9. }
    10. }
    11. class Person{
    12. E s;
    13. public Person(E s) {
    14. this.s = s;
    15. }
    16. public E f(){
    17. return s;
    18. }
    19. }
    20. class Person2{
    21. String s;
    22. public Person2(String s) {
    23. this.s = s;
    24. }
    25. public String f(){
    26. return s;
    27. }
    28. }

    泛型的使用细节

    1.泛型只能是引用类型,不能是基本类型

    1. List<int> list=new ArrayList<>(); //error
    2. List list2=new ArrayList<>(); //ok

    2.在给泛型指定具体类型后,可以传入该类型或者其子类类型(向上转型)

    1. Person person3=new Person<>(new A());
    2. Person person4=new Person<>(new B()); //不会报错
    3. }
    4. }
    5. class A{}
    6. class B extends A{}

    3.没有给泛型指定,默认是Object

    4.泛型标识符可以有多个

    5.普通成员可以使用泛型(属性、方法)

    6.使用泛型的数组,不能初始化 (无法确定类型,无法初始化空间)

    7.静态方法中不能使用类的泛型

    自定义泛型类

    1. //1. Tiger后面泛型,所以我们把 Tiger就称为自定义泛型类
    2. //2,T,R ,M 泛型的标识符,一般是单个大写字母
    3. //3.泛型标识符可以有多个。
    4. //4.普通成员可以使用泛型〔属性、方法)
    5. //5.使用泛型的数组,不能初始化
    6. //6.静态方法中不能使用类的泛型 静态方法在实例创建之前就被加载,而泛型是在创建时确认的
    7. class Tiger{
    8. String name;
    9. T t; //属性使用泛型
    10. D d;
    11. M m;
    12. T[] ts;//因为数组在new 不能确定T的类型,就无法在内存开空间
    13. public Tiger(String name, T t, D d, M m) {
    14. this.name = name;
    15. this.t = t;
    16. this.d = d;
    17. this.m = m;
    18. }
    19. }

    自定义泛型接口

    接口中,静态成员也不能使用泛型(这个和泛型类规定一样)

    泛型接口的类型,在继承接口或者实现接口时确定

    没有指定类型,默认为Object

    自定义泛型方法

    1. //泛型方法,可以定义在普通类中,也可以定义在泛型类中
    2. //当泛型方法被调用时,就会被确定类型
    3. class Car{
    4. public void run(){}
    5. public void go(T t ,D d){
    6. }
    7. }
    8. main{ //泛型方法在传入形参时自动确认类型,不需要在<>中说明
    9. Car car=new Car();
    10. car.go("abc",123);
    11. }

    注意区别:泛型方法和使用泛型的普通方法是不一样的!

     

  • 相关阅读:
    Go runtime 调度器精讲(十):异步抢占
    408知识框架总结——计算机网络
    Proxyless Mesh 在 Dubbo 中的实战指南
    vxe-table 打包部署上线,校验样式失效
    【FPGA】串口以命令控制温度采集
    maven
    Win10电脑任务栏没有蓝牙图标的简单解决方法
    SpringBoot实现登录拦截器
    快速学会JDBC及获取连接的五种方式
    Elasticsearch跨集群检索配置
  • 原文地址:https://blog.csdn.net/m0_46845579/article/details/126460186
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号