【泛型】学习笔记

1.工作中的使用

例子1@Getterprivate int type;private Class<? extends AbstractActivity> clazz;ActivityType(int type, Class<? extends AbstractActivity> clazz) {this.type = type;this.clazz = clazz;}public AbstractActivity newInstance(ActivityEntity activityEntity) {try {// 创建一个对象,并且传入一个参数return clazz.getConstructor(ActivityEntity.class).newInstance(activityEntity);} catch (Exception e) {logger.error("ActivityType newInstance catch error:", e);return null;}}例子2public static <T> T f(Class<T> clazz, int num) throws Exception {// 使用时,我们要知道调用的类型是啥,进行指定即可,int.class其实我们可以用限定符指定return clazz.getConstructor(int.class).newInstance(num);}Integer num = f(int.class, 3);System.out.println(num);

2.guava TypeToken

Guava的TypeToken在泛型编程中的应用_guava typetoken-CSDN博客

3.Fastjson的使用 // 指定TypeToken防止解析出的类型变为了Object

public static void main(String ... args) {String personString = "[{\"id\":1,\"name\":\"Irene\",\"password\":\"123456\"},{\"id\":2,\"name\":\"Aiden\","+ "\"password\":\"123456\"}]";List<Person> persons = JSON.parseObject(personString, new TypeToken<List<Person>>(){}.getType());}@Datapublic static class Person {private int id;private String name;private String password;}

4.黑马学习笔记

/*
1)没有泛型时:没有泛型前: 使用Object可以存放任意的元素泛型的出现:和集合有很大的关系需要强转使用上:读取时是Object,具体使用需要强转。严重问题:虽然类型转换有错误,但是编译期没问题,运行期异常。2)引入泛型作用:编译器的检查。 在使用时必须按照指定的类型来存储。3)泛型的好处:1.编译期检查类型2.无需数据类型转换4)会自动装箱(添加时)。会自动拆箱(从集合取出数据时)。5)泛型集合有点像:类型的形参。6)泛型的本质:就是参数化类型。类型的形参。7)泛型标识: T,E,K,V8)泛型类没有指定类型,则按照Object。9)泛型类,不支持int,编译期的时候,转化为Object,因为int不继承Object,因此不能是基本数据类型!10)打印xx.getClass():同一个泛型类,根据不同的数据类型创建的对象,本质是同一类型。11)泛型在逻辑上可以看成是不同的类型,但是实际上都是相同的类型,也就是Xxx.class12)泛型类继承:子类有泛型的话,必须有一个类型和父类提供的一样,当然自己可以新增别的泛型类型。子类无泛型的话,则必须明确父类的泛型类型。13)泛型接口实现类不是泛型类实现类是泛型类14)泛型方法泛型方法:在调用方法的时候,指明泛型的具体类型。注意:只使用了泛型类中的类型的方法不是泛型方法,而是成员方法。泛型方法是独立于泛型类中的类型的,可以加static。 成员方法类型使用的是类中指定的泛型,不能加static。泛型类则是:在实例化的时候指明泛型的具体类型。15)类型通配符上限:? : 表示实参,但是我们可以指定边界,比如: <? extends Number>, 就是:Number或者Number的子类。问题: 不能填充元素。因为我们不知道它到底是什么类型,所以我们不能new一个元素填充进去。下限:<? super 实参类型>16)泛型擦除:1.5版本才引入的,之前没有泛型,为了和之前代码兼容,泛型只存在于编译阶段,在进入jvm之前,与泛型相关的信息会被擦除掉。证明:intList.getClass().getSimpleName();strList.getClass().getSimpleName();打印信息:发现都是ArrayList17)拿到字节码文件Class<? extends Erasure> clazz = erasure.getClass();获取到所有的成员变量:Field[] fields : clazz.getDeclaredFields();field.getType().getSimpleName() 发现 是Object // 也就是通过反射再去看的时候,类型被擦除成了Object有限制的类型擦除:T extens Number,就会被擦除为Number桥接方法的生成:类型擦除和多态发生了冲突,为了解决这个问题,编译器会产生一个桥接方法,在虚拟机中会由参数好返回值类型不同而产生2个不同的字节码文件,但是虚拟机能够正确的处理这种情况。info:Integerinfo:Object18)泛型数组可以声明带泛型的数组引用,但是不能直接创建带泛型的数组对象。可以通过:Array.newInstance(Class<T>, int)创建T[]数组在编译期会进行类型擦除,而数组则是一直持有,所以2者设计是冲突的,java这直接不让那么做。创建:T[] arr = new T[3]; // 直接失败,因为我们根本不知道T是什么类型。@SuppressWarnings("all")public static <T> T[] createArr(Class<T> clazz, int len) {return (T[]) Array.newInstance(clazz, len);}19)泛型和反射Class<Person> personClass = Person.class;Constructor<Person> constructor = personClass.getConstructor();Person person = constructor.newInstance();*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/45500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP协议:如何实现客户端和服务器端的交流?

实例&#xff1a;超简陋版人工AI对答程序 一、描述&#xff1a; 在客户端输入问题&#xff0c;服务器端将给出答案。 二、代码示例 1.客户端 步骤&#xff1a; 首先创建一个Scanner对象input&#xff0c;用于从控制台读取用户输入的问题。用户输入的一行文本将存储在quest…

【Jfrog Artifactory】配置邮件服务器

教程使用QQ邮箱 配置路径是&#xff1a; http://IP:8082/ui/admin/configuration/mail 进入到Mail Server&#xff0c;然后按照格式填入&#xff1a; Host &#xff1a;smtp.qq.com 【发送服务器】 Port&#xff1a;587 【我的环境465无法发送成功】 Username&#xff1a;QQ邮…

C++:从C语言过渡到C++

在这篇博客中&#xff0c;我将会介绍从C语言过渡到C的一些基础知识。 目录 C起源 C的关键字 输出hello&#xff0c;world ​编辑 命名空间 1.什么是命名空间 2.namespace的作用 3.域作用限定符 4.命名空间的使用 IO流 缺省参数 函数重载 引用 1.引用的定义 2.引…

【Python3】自动化测试_Playwright最简单示例

启动 Playwright实例&#xff1a;sync_playwright().start() 终止 Playwright 实例&#xff1a;myPlaywright.stop() Playwright 模块提供了一种启动浏览器实例的方法。以下是使用 Playwright 驱动自动化的典型示例&#xff1a; from playwright.sync_api import sync_playw…

C++入门基础简述

文章目录 前言1、C首个程序2、namespace关键字3、C输入/输出4、缺省参数5、函数重载6、C中的引用7、const 引用8、指针和引用的关系9、inline关键字10、nullptr关键字 前言 此篇文章主要简述流程&#xff1a;C首个程序 -> namespace关键字 -> C输入/输出 -> 缺省参数 …

【C++航海王:追寻罗杰的编程之路】一篇文章带你认识哈希

目录 1 -> unordered系列关联式容器 1.1 -> unordered_map 1.1.1 -> unordered_map的文档介绍 1.1.2 -> unordered_map的接口说明 1.2 -> unordered_set 2 -> 底层结构 2.1 -> 哈希概念 2.2 -> 哈希冲突 2.3 -> 哈希函数 2.4 -> 哈希冲…

100 个网络基础知识普及,看完成半个网络高手!

1&#xff09;什么是链接&#xff1f; 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2&#xff09;OSI 参考模型的层次是什么&#xff1f; 有 7 个 OSI 层&#xff1a;物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0…

公有云API常见的认证方式

公有云API常见的认证方式 Token认证 &#xff08;百度云、腾讯云&#xff09; AK/SK认证 (阿里云、天翼云、腾讯云) RSA非对称加密方式 &#xff08;信核云灾备&#xff09; Token认证 AK/SK认证 RSA认证 种方式使用一对密钥&#xff0c;即公钥和私钥。公钥可以公开&#x…

.gitmodules文件

.gitmodules文件在Git仓库中的作用 .gitmodules 文件是 Git 版本控制系统中用来跟踪和管理子模块的配置文件。子模块允许你将一个 Git 仓库嵌套在另一个仓库中&#xff0c;这样可以方便地管理多个项目之间的依赖关系。 在 .gitmodules 文件中&#xff0c;通常会记录每个子模块…

柳永,市井生活的吟游者

柳永&#xff0c;原名柳三变&#xff0c;字景庄&#xff0c;后改名为柳永&#xff0c;字耆卿&#xff0c;约生于宋太宗雍熙元年&#xff08;公元984年&#xff09;&#xff0c;卒于宋仁宗皇祐五年&#xff08;公元1053年&#xff09;&#xff0c;享年69岁。他是北宋著名词人&am…

基于eBPF的procstat软件追踪程序Offcpu时间

在现代计算机系统中&#xff0c;性能调优和问题诊断是大家经常会面临的问题&#xff0c;解决这些性能问题是确保程序高效运行的关键。有时不知为何程序的吞吐量和时延出现抖动&#xff0c;有一种可能就是程序发生了Offcpu。了解程序的 Offcpu 时间有助于识别潜在的性能瓶颈和系…

力扣215 数组中第k大的数

给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 本题主要考察各种排序算法&#xff0c;…

【论文速读】《面向深度学习的联合消息传递与自编码器》,无线AI的挑战和解决思路

这篇文章来自华为的渥太华无线先进系统能力中心和无线技术实验室&#xff0c;作者中有大名鼎鼎的童文。 一、自编码架构的全局收发机面临的主要问题 文章对我比较有启发的地方&#xff0c;是提到自编码架构的全局收发机面临的主要问题&#xff1a; 问题一&#xff1a;基于随…

Rhino云渲染使用教程

Rhino是一款功能强大、灵活易用的三维计算机图形建模软件&#xff0c;广泛应用于建筑、工业设计、产品设计、珠宝设计、动画制作等多个领域。哪Rhino可不可以使用云渲染呢&#xff1f;答案是可以的&#xff0c;下面给大家介绍一下炫云Rhino云渲染的使用方法。 1、搜索“炫云”…

springboot枚举简单使用笔记

springboot枚举简单使用笔记 定义枚举: package com.geofly.ynygzx.iscp.api.common.enums;/*** Description: 需求提交记录状态枚举** Param:* Return:* Author yanghaoxing* Date 2024/7/12 10:01*/public enum RequirementSubmissionStatus {BACK("已撤回", 0),S…

摘要算法介绍

摘要算法介绍 摘要算法&#xff08;Hash Algorithm&#xff09;是一种将任意长度的数据映射为固定长度的哈希值&#xff08;摘要&#xff09;的算法。哈希值通常用作数据的唯一标识符&#xff0c;在数据完整性验证、数字签名、密码学等领域有广泛应用。以下是摘要算法的详细介…

Java I/O模式 (一)

第一章 Java的I/O演进之路 1.1 I/O模型基本说明 1/0模型&#xff1a;就是用什么样的通道或者说是通信模式和架构进行数据的传输和接收&#xff0c;很大程度上决定了程序通信的性能&#xff0c;Java 共支持3种网络编程的/10 模型&#xff1a;BIO、NIO、AIO 实际通信需求下&am…

Centos忘记密码,重置root密码

Centos忘记密码&#xff0c;重置root密码 操作环境&#xff1a;Centos7.6 1、选择包含rescue的选项&#xff0c;按e进入编辑模式 首先&#xff0c;我们需要重启系统&#xff0c;进入开机引导菜单界面。在这里&#xff0c;我们可以看到系统的内核版本和启动参数等信息。我们需…

【JavaEE精炼宝库】文件操作(2)——文件内容读写 | IO流

文章目录 一、输入流1.1 InputStream 概述&#xff1a;1.2 read 方法详解&#xff1a;1.3 close 方法&#xff1a;1.4 利用 Scanner 进行读操作&#xff1a;1.5 Reader&#xff1a; 二、输出流2.1 OutputStream 概述&#xff1a;2.2 write 方法详解&#xff1a;2.3 利用 PrintW…

学习测试8-数据库mysql操作

下载配置mysql 网络博客 使用 在Linux里 1 service mysql start 启动服务 2 在Navicatt 中连接Linux服务器 3 第一步 将所有文件上传到/opt目录下 第二步 chmod 777 deploy-mysql.sh 第三步 ./deploy-mysql.sh4 service mysql status 查看状态是否安装成功 5 重启mys…