泛型

什么是泛型

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

为什么使用泛型

  • 泛型提高程序操作的可读性和安全性。
  • 例如集合类型,由于集合在存储对象的时候不会保留其数据类型信息,任何数据类型对象存入集合中时都被当作 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. LeetCode_788. 旋转数字

    写在前面 难度:简单 原文:https://leetcode-cn.com/problems/rotated-digits/ 题目 我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度 ...

  2. 第三方模块:requests模块和openpyxl模块

    1.第三方模块的下载应由 第三方模块:别人写的模块 一般情况下功能都特别强大 我们如果想使用第三方模块 第一次必须先下载后面才可以反复使用(等同于内置模块) 下载第三方模块的方式 1.pip工具 注意 ...

  3. 【开发宝典】Java并发系列教程(四)

    作者:京东零售 刘跃明 Monitor概念 Java对象的内存布局 对象除了我们自定义的一些属性外,还有其它数据,在内存中可以分为三个区域:对象头.实例数据.对齐填充,这三个区域组成起来才是一个完整的 ...

  4. .net 多地点计算中心点

    1.需求产生 快到周末了,几个远在各个区的朋友想要聚餐,为了照顾到彼此的距离,决定计算一下所有人的中心点,至此需求产生,下面开始编写代码. 2.编写代码 1)新建一个控制台程序 在NuGet程序包管理 ...

  5. Ubuntu18.04编译ZLMediakit支持webrtc

    背景 最近在做流媒体相关的一些东西, 比较了一些开源的流媒体服务, 目前 srs 和 ZlmediaKit 项目是评价比较高的, 今天主要在 Ubuntu18.04 上编译 ZlmediaKit, 并 ...

  6. JZOJ 2022.02.11【提高A组】模拟

    \(\text{Solution}\) 首先把 \(T2\) 给切了,\(T1\) 找半天规律找不到 然后打了个表算是暴力了 \(T3\) 也暴... 太暴了... \(T4\) 直接啥也不会 \(\ ...

  7. HTML5基本网页结构以及标签的改变

    转载csdn:https://blog.csdn.net/z983002710/article/details/76300327

  8. CF837F - Prefix Sums

    首先,我们发现这道题目"序列会增长"的情况完全就是唬人的,因为我们把 \(x_i\) 输入之后,\(y_i\) 永远是 \(0\),而前导 \(0\) 在计算的过程中没有任何的作用 ...

  9. 基于Python的OpenGL 01 之Hello Triangle

    1. 引言 本文基于Python语言,描述OpenGL的绘制流程,这里描述的是OpenGL的核心模式(Core-profile) 本文基于GLFW与PyOpenGL库进行开发,Python语言下的Op ...

  10. Postgresql 二进制字符串函数和操作符

    1.SQL 二进制字符串函数和操作符 函数 返回类型 描述 例子 结果 string || string bytea 字符串连接 E'\\\\Post'::bytea || E'\\047gres\\ ...