码农知识堂 - 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. }

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

     

  • 相关阅读:
    基于STM32+华为云IOT设计的智能衣柜
    Shader的组成部分Fallback
    基于Android的乐鲜生活APP设计与实现
    XML详解--语法、DTD、schema
    Spring Boot项目误将Integer类型写成int来进行传参
    登陆认证&权限控制(2)—— 基于Spring security 安全框架的权限管理 & 注解式权限控制 & RABC模型
    分享一个 SpringCloud Feign 中所埋藏的坑
    辊轧机液压系统泵站比例阀放大器
    Transformer详解
    P13 JDBC 简介
  • 原文地址:https://blog.csdn.net/m0_46845579/article/details/126460186
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号