码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 泛型与反射,看这篇就够了


    目录

    泛型:编译阶段检查程序是否存在错误的手段。

    *泛型的定义

    *泛型类的定义:

    *使用泛型类:

    *使用泛型的好处:

    泛型的限制和规则

    **泛型方法:

    1,使用泛型参数的普通方法:

    2,返回值和参数都使用泛型的泛型方法

     泛型接口:

     通配符:

    一,?

    二,?super Number,设置泛型的下限

    三,? extents Number,设置泛型上限

    **类型擦除

    反射:动态获取信息及调用对象的机制称为反射机制。

    1,获取该类的class对象(有JVM产生,全局唯一)

    2,通过反射获取构造方法。

    通过Method得到的方法,调用方法。


    泛型:编译阶段检查程序是否存在错误的手段。

    *泛型的定义

    所谓泛型就是在类定义时不明确类型,在使用时明确类型

    泛型:“<>”使用钻石操作符,<类>

    *泛型类的定义:

    1. package 泛型;
    2. public class Point<T> {
    3. //T类型参数
    4. //此时xy的类型不确定,但保证了xy的类型一致性,xy的类型在产生对象时确定
    5. private T x;
    6. private T y;
    7. public T getX() {
    8. return x;
    9. }
    10. public void setX(T x) {
    11. this.x = x;
    12. }
    13. public T getY() {
    14. return y;
    15. }
    16. public void setY(T y) {
    17. this.y = y;
    18. }
    19. }

    *使用泛型类:

    将泛型参数定义为String类型,将T x 转换成 String x,在给x赋整形值时就会报错。

    多个泛型的使用:使用不同的大写字母来指定不同的类型。

     

    *使用泛型的好处:

    1,编译阶段检查类型是否一致,避免向下转型的强制类型转换的出错问题。

    2,代码利于重用。

    泛型的限制和规则

    • 泛型的类型参数只能是引用类型,不能使用值类型。
    • 泛型的类型参数可以有多个。
    • 泛型类不是真正存在的类,不能使用instanceof运算符。
    • 泛型类的类型参数不能用在静态申明。
    • 如果定义了泛型,不指定具体类型,泛型默认指定为Ojbect类型。
    • 泛型使用?作为类型通配符,表示未知类型,可以匹配任何类型。因为是未知,所以无法添加元素。
    • 类型通配符上限:<? extends T>,?代表是T类型本身或者是T的子类型。常用于泛型方法,避免类型转换。
    • 类型通配符下限。<? super T>,?代表T类型本身或者是T的父类型。
    • 除了通配符可以实现限制,类、接口和方法中定义的泛型参数也能限制上限和下限。

    **泛型方法:

    1,使用泛型参数的普通方法:

    1. public T fun(T t){
    2. return t;
    3. }

    2,返回值和参数都使用泛型的泛型方法

    1. public <T> T Point(T t){
    2. return t;
    3. }

    如果一个类是泛型类,泛型方法的类型参数与类的泛型参数无关。只与自己方法定义的泛型参数有关。

    一个类是普通类,任然了可以定义泛型方法。但是定义的泛型方法,不能是被static修饰的 ,因为使用static修饰的类方法,无法给泛型传递泛型参数。

    泛型类的泛型方法只能实例的。泛型方法在定义泛型时,使用不同的大写字母,避免产生歧义。

    使用泛型参数的方法,不能被定义为静态的

     泛型接口:

    泛型接口,使用<>钻石操作符定义的接口,在实现接口时,可以继续保留泛型,也可以在实现类中

     

     通配符:

    三种通配符均可以设置在类和方法中。

    一,?

     

    二,?super Number,设置泛型的下限

     

      

    三,? extents Number,设置泛型上限

    表示最顶层的类型只能是Number和Number类的子类。

     

     

    **类型擦除

    泛型:语法糖 

    类型擦除:泛型信息其实只在编译阶段,进入JVM后,会将所有和泛型相关的信息擦除掉。

    若没有规定泛型上限,则所有的泛型信息都会被擦除为Object类型,

    若规定了泛型上限,则擦除为相应的泛型上限类型。

    泛型类和普通类进入JVM之后,没有任何区别

    经过javac编译以后,生成*.class 文件,泛型就会消失。

     

    反射:动态获取信息及调用对象的机制称为反射机制。

    一切框架的基础

    在JVM运行时,

    对于JVM中的任何一个类,都能动态获取该类的所有属性和方法。

    对于JVM中的任何一个对象,都可以动态获取该对象的属性和方法。

    反射的类型:

    运行时类型:RTTI

    编译时类型:

    Person p = new Student();//编译时类型为Person,运行时类型为Student;

    运行时类型的获取可以通过反射获取。

    1,获取该类的class对象(有JVM产生,全局唯一)

    a,调用Class.forName(包名.类名)

    b,调用类名.class获取

    c,通过对象.getClass()获取。

    2,通过反射获取构造方法。

    get只能获取public修饰的属性和方法。

    getDeclared...()的方法获取全部的属性和方法。

     

     

     破坏封装性:

     使用class关键字,包括数组,接口编译后产生的class文件就唯一对应一个Class对象,这个对象有JVM产生,使用这个对象就可以获取该类的所有信息。

     

    通过Method得到的方法,调用方法。

     

  • 相关阅读:
    通过宏将父类protected函数在子类中提升为public
    如何让你的Node.js应用程序处理数百万的API请求
    一篇文章让你学会K8s软件安装神器Helm
    解放生产力orm并发更新下应该这么处理求求你别再用UpdateById了
    一文搞懂二分查找算法!
    C语言程序设计教程(第三版)李凤霞 第十章课后习题答案
    学1个月爬虫就月赚6000?别被骗了,老师傅告诉你爬虫的真实情况!
    chatgpt图片识别、生成图片、语音对话多模态深度试玩
    【HTML】HTML网页设计----非遗网页设计
    以“防方视角”观Shiro反序列化漏洞
  • 原文地址:https://blog.csdn.net/qq_52655865/article/details/124765613
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号