泛型

什么是泛型

  • 泛型,即“参数化类型”。顾名思义,就是将类型参数化,然后在使用/调用时传入具体的类型(类型实参)。

为什么使用泛型

  • 泛型提高程序操作的可读性和安全性。
  • 例如集合类型,由于集合在存储对象的时候不会保留其数据类型信息,任何数据类型对象存入集合中时都被当作 Object 类型的数据,当我们从集合中获取元素时,就需要进行强制类型转换。

泛型通配符

  • List<T> 无限定通配符
  • List<? super T> T 是类型通配符的下限,List中存储的类型必须是T的父类
  • List<? extends T> T 是类型通配符的上限,List中存储的类型必须是T的子类

泛型代码和虚拟机

  • java 代码在编译时会对泛型进行擦除,并使用其限定类型(无限定的变量用Object)替换
  • 执行流程为:编译器先检查代码中泛型的类型,然后再进行类型擦除,再进行编译。
  • 由于编译时擦除了泛型,因此虚拟机中没有泛型
  • 为了保证类型的安全性,会在获取泛型类对象时,插入强制类型转换

反射

什么是反射

  • JAVA反射机制是:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的功能称为反射机制。

反射的使用方式

获取类的字节码Class对象

  • 对象.getClass() 由于需要先获取对象,因此会实例化类对象
  • 类.class()
  • Class.forName(类的全限定名)

通过Class类对象实现实例化

  • Class对象.newInstance()
  • newInstance()方法内部实际上调用了无参数构造方法

通过Class类对象可获取的参数



参考博客:

[https://blog.csdn.net/qq_40408443/article/details/123206594]

https://blog.csdn.net/qq_44715943/article/details/120587716

java-javaSE-泛型和反射的更多相关文章

  1. JAVA的泛型与反射的联合应用

    通过泛型与反射的结合,可以编写框架来使开发更容易,这里演示的是BaseDao部分的简单使用. BaseDao部分代码: public abstract class BaseDao<T>{ ...

  2. java的泛型与反射机制

    什么是泛型? 泛型,即“参数化类型”.顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参) ...

  3. 关于Java中泛型、反射和注解的扫盲篇

    泛型 泛型概念   泛型是在JDK1.5之后引入的,旨在让我们写出更加通用化,更加灵活的代码.通用化的手段在于让数据类型变得参数化,定义泛型时,对应的数据类型是不确定的,泛型方法被调用时,会指定具体类 ...

  4. 应用Java泛型和反射导出CSV文件

    项目中有需求要把数据导出为CSV文件,因为不同的类有不同的属性,为了代码简单,应用Java的泛型和反射,写了一个函数,完成导出功能. public <T> void saveFile(Li ...

  5. JAVA 注解,泛型,反射获取泛型,并实例化

    JAVA 的泛型加大了 编程的灵活性,在配合上反射,可以让我们省去大量的重复代码,当你用 SpringBoot 整合 JPA 的时候 你会发现,你的 DAO 层只需要继承 BaseDao,在显示标明泛 ...

  6. Java高质量代码之 — 泛型与反射

    在Java5后推出了泛型,使我们在编译期间操作集合或类时更加的安全,更方便代码的阅读,而让身为编译性语言的Java提供动态性的反射技术,更是在框架开发中大行其道,从而让Java活起来,下面看一下在使用 ...

  7. Java泛型和反射

    1. 字节码对象的三种获取方式 以String为例 Class<? extends String> strCls = "".getClass(); Class<S ...

  8. Java基础系列 - 泛型和反射机制

    package com.test5; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * Java泛型和反射机 ...

  9. java中的泛型与反射

    在java开发中,大多数情况是多人开发,那么如何在没有API的情况下,快速的理解到别人开发的一些类的详细信息呢? 比如函数名,类名,返回参数等等 我们可以定义一个反射机制的类,通过此类来打印此你想要操 ...

  10. Java“禁止”泛型数组

    Java“禁止”泛型数组 原文:https://blog.csdn.net/yi_Afly/article/details/52058708 1. 泛型定义泛型编程是一种通过参数化的方式将数据处理与数 ...

随机推荐

  1. mysql查询逗号,分隔的多个id连表查询

    先来几个SQL看看效果 SELECT i.*,n.*FROM iLEFT JOIN n on FIND_IN_SET(n.id, i.n_id)GROUP BY n.id效果图: 想把信息都放一行里面 ...

  2. 破解练习-CRACKME001

    001-注册算法分析 一.工具和调试环境 动态调试工具:x64dbg 系统环境:win10 1909 二.分析Serial/name的算法 由于Serial里面就是一个字符串比较,没有啥算法,这里就不 ...

  3. Vue20 生命周期

    转:https://blog.csdn.net/weixin_45791692/article/details/124045505 1 简介 Vue的生命周期就是vue实例从创建到销毁的全过程,也就是 ...

  4. JAVA虚拟机25---编译器,解释器,JAVA中的即时编译

    https://www.cnblogs.com/somefuture/p/14272221.html 1.简介 编译器:是一种计算机程序,负责把一种编程语言编写的源码转换成另外一种计算机代码,后者往往 ...

  5. python爬虫(含scrapy)

    python爬虫 1.解析HTML: lxml 是一种python编写的库,可以迅速.灵活的处理xml和html 使用:根据版本的不同,有如下两种: 形式1: from lxml import etr ...

  6. 中南大学CSU2022-2023级C语言期中考试机试答案

    卡在出线概率了.40%,没想到遍历时反了,我去. 1.时钟加法 1 #include<stdio.h> 2 3 #include<string.h> 4 5 #include& ...

  7. Winform程序制作安装包

    记录一下Winform程序打包过程 参考文章:VS2017 WinFrom打包设置与教程 下载 Visual Studio Installer 拓展插件 从VS2017开始VS已默认不再集成Insta ...

  8. P3387 缩点

    \(Tarjan\) 模板 #include<cstdio> #include<queue> #include<iostream> #define re regis ...

  9. Luogu P3919 【模板】可持久化线段树 1(可持久化数组)

    板子,正好温习一下主席树的写法 记得数组开 \(32\) 倍!! \(Code\) #include<cstdio> using namespace std; const int N = ...

  10. C语言使用fopen出现C4996错误解决方法

    Visual Studio 不安全提醒屏蔽方法: 打开项目----项目属性---配置属性----C/C++ ----预处理器----预处理定义,添加 _CRT_SECURE_NO_DEPRECATE ...