泛型新理解

1.创建三个类,并写好对应关系

package com.jmj.gulimall.study;public class People {
}
package com.jmj.gulimall.study;public class Student extends People{
}
package com.jmj.gulimall.study;public class Teacher extends People{
}

2.解释一下这三个方法

  public static <T,U extends T> void test(T a,U b){}public static <T extends People,U extends T> void test(T a,U b){}public static <T ,U extends T> void test(Class<T> tClass,T a,U b){}

方法一 : 因为泛型会有类型擦除,所以在编译器被擦除为 Object 所以编译器检测不出 你的 a 和 b是否有继承关系,因为都是Object 类型

方法二 :因为显示 约束了 T 的类型, 泛型会被擦除为People 类型的下届或者同级,所以编译器能够约束好 U的类型 是T 的同类或子类

方法三 : 因为给了 T的字节码对象,所以字节码对象是不会在编译期 擦除,所以编译还是知道 T是什么类型,也能够检测出 U的类型是不是 T的同类或子类

3.类型擦除

其实就是 把原泛型的方法

比如这个方法, T 和U类型全部变成 Object

相当于

  public static  void test(Object a,Object b){}

 若有返回值,他会在编译期间加上强制类型转换成你传入进去的类型,相同的类型,保证类型安全转换,若是不同类型,则会在编译期间报错,告诉你类型不正确,这就是 类型擦除!!!

4.? 类型 相当于 Object 然后它可以 加 extend 或者 super

super 表示?的下届  extend 表示?的上界, 一般用在集合泛型比较多,

加了这个是可以进行集合的强转泛型的,不加是转不了的

1、第一种用法

 public static void main(String[] args) {List<? extends People> students = new ArrayList<>();List<? super Student> objects = new ArrayList<>();Student people = (Student) students.get(0);objects= (List<? super Student>) students;students= (List<? extends People>) objects;}

2、第二种用法 

  public static <T extends People> List<T> getList(){List<Student> objects = new ArrayList<>();return (List<T>) objects;}public static void main(String[] args) {List<Student> list = getList();}

3、第三种用法 

  public static  List<? super Student> getList(){List<People> objects = new ArrayList<>();return  objects;}public static void main(String[] args) {List<People> list = (List<People>) getList();System.out.println(list);}

4、第四种用法 

  public static void main(String[] args) {ArrayList<Student> students = new ArrayList<>();students.add(new Student());List<? extends People> list =students;List<People> peopleList = (List<People>) list;People people = peopleList.get(0);System.out.println(people);ArrayList<People> peopleArrayList = new ArrayList<>();peopleArrayList.add(new People());List<? super Student> arrayList = peopleArrayList;List<Student> a = (List<Student>) arrayList;System.out.println(a);}

5、第五种用法 

    public static <T extends People> T max(List<? extends T> list) {List<? extends T> list1 = list;T t = list.get(0);return null;}public static void main(String[] args) {max(new ArrayList<Student>());}

6、第六种用法

    public static <T extends People> T max(List<? super T> list,Class<T> tClass) {return null;}public static void main(String[] args) {max(new ArrayList<Student>(), Son.class);}

7、第七种用法 

    public static <T extends People> T max(List<? super T> list,Class<T> tClass) {List<? super T> list1 = list;List< T> a = (List<T>) list1;return null;}public static void main(String[] args) {max(new ArrayList<Gard>(), People.class);}

 

5.安卓里面 View继承,拿到子类对象,是这么拿的

public static <T extends People> T getList(){return (T) new Student();}public static void main(String[] args) {Student list = getList();}

但是转的不对会抛 强制类型转换异常

 public <T extends View> T findViewById(int id) {// 查找当前视图的子视图中是否存在指定 id 的视图if (id == NO_ID) {return null;}// 在当前视图中查找视图View result = findViewById(id, this);return (T) result;}

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

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

相关文章

数据结构(稀疏数组)

简介 稀疏数组是一种数据结构&#xff0c;用于有效地存储和处理那些大多数元素都是零或者重复值的数组。在稀疏数组中&#xff0c;只有非零或非重复的元素会被存储&#xff0c;从而节省内存空间。 案例引入 假如想把下面这张表存入文件&#xff0c;我们会怎么做&#xff1f;…

【LeetCode】翻转二叉树

目录 一、题目二、解法完整代码 一、题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 输入&#xff1a;root…

php-fpm如何配置max_children参数

前言 略 php-fpm 资源耗尽 php-fpm 的子进程耗尽的时&#xff1a; 会导致 502 出现nginx 出现错误日志 2024/07/18 20:19:10 [crit] 36390#0: *1402471 connect() to unix:/tmp/php-cgi-81.sock failed (2: No such file or directory) while connecting to upstream, cli…

Spring Authorization Server实战

Spring Authorization Server实战 Spring Authorizatin Server Spring Authorizatin Server是一个框架&#xff0c;它提供了OAuth2.1和OpenID Connect 1.0规范以及其它相关规范的实现&#xff0c;它是基于Spring Security构建的 OAuth2.0协议介绍 OAuth是一个开放标准的授权…

使用docker swarm搭建ruoyi集群环境

整体目标 项目背景 领导给到了我一个客户&#xff0c;客户商业模式为成本制作&#xff0c;成本核算。其中涉及到大量涉密数据&#xff0c;且与我们现有产品几乎没有兼容点&#xff08;我们是一套低代码的框架&#xff0c;客户有很多业务二开&#xff09; 测试环境给到了我6台…

大模型学习笔记 - LLM模型架构

LLM 模型架构 LLM 模型架构 1. LLM 核心模型 Transformer2. 详细配置 2.1 归一化方法2.2 归一化模块位置2.3 激活函数2.4 位置编码 2.4.1 绝对位置编码2.4.2 相对位置编码2.4.3 旋转位置编码 RoPE2.4.4 ALiBi位置编码 2.5 注意力机制 2.5.1 完整自注意力机制2.5.2 稀疏注意力机…

ChatGPT实战100例 - (20) 如何玩转影刀RPA

文章目录 ChatGPT实战100例 - (20) 如何玩转影刀RPA背景需求需求分析与流程设计一、需求收集二、流程梳理三、可行性分析流程设计(详细步骤)具体步骤的影刀RPA实现流程图总结AIGC在影刀RPA中的使用总结其他RPA步骤中可能用到AIGC的地方展望总结ChatGPT实战100例 - (20) 如何玩…

LeYOLO, New Scalable and Efficient CNN Architecture for Object Detection

LeYOLO, New Scalable and Efficient CNN Architecture for Object Detection 论文链接&#xff1a;http://arxiv.org/abs/2406.14239 代码链接&#xff1a;https://github.com/LilianHollard/LeYOLO 一、介绍 本文关注基于FLOP的高效目标检测计算的神经网络架构设计选择&am…

【Vite】快速入门及其配置

概述 Vite是前端构建工具。vite 相较于webpack,vite采用了不同的运行方式&#xff1a; 开发时&#xff0c;并不对代码打包&#xff0c;而是直接采用ESM的方式来运行项目在项目打包部署时&#xff0c;使用 rollup 对项目进行打包除了速度外&#xff0c;vite使用起来也更加方便…

驱动程序在\device\raidport1 上检测到控制器错误

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

全新UI自助图文打印系统小程序源码/自助云打印机前后端源码

全新UI自助图文打印系统小程序源码&#xff0c;自助云打印机前后端源码。最新的自助图文打印系统和证件照云打印小程序源码采用了PHP作为后端开发语言&#xff0c;旨在为用户提供全面的自助打印服务。 这些服务覆盖了多种文件格式&#xff0c;包括文档、图片、表格等。除此之外…

pipeline:无题

这里写自定义目录标题 复盘我是如何做的撰写评审文档O-KR-KA任务网络图与计划资源需求 && 风险项资源需求风险项 其他 讨论、评审文档撰写评审纪要、结论 反思 复盘 目前工作中的一个现状是&#xff0c;在季度开始的时候需要自己思考方向、规划工作&#xff1b;可能还需…

手机接Usb hub再连接电脑下D+D-波形

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

医联体信息平台建设方案PPT(54页)

文章摘要&#xff1a; 医联体信息平台现状当前医联体信息平台存在脱离医疗业务建设的倾向&#xff0c;导致信息孤岛&#xff0c;业务协同困难。 建设存在的问题主要问题包括健康档案无法动态更新和共享&#xff0c;信息系统之间信息共享和协同不足。 医联体信息平台建设方案方…

堆及堆的管理

堆的作用 堆是用来作为存储空间的 堆的创建与释放 分离的空闲空间的管理建议使用链表 在链表中指定空间大小及下一块空闲链表

2.3 大模型硬件基础:AI芯片(上篇) —— 《带你自学大语言模型》系列

本系列目录 《带你自学大语言模型》系列部分目录及计划&#xff0c;完整版目录见&#xff1a;带你自学大语言模型系列 —— 前言 第一部分 走进大语言模型&#xff08;科普向&#xff09; 第一章 走进大语言模型 1.1 从图灵机到GPT&#xff0c;人工智能经历了什么&#xff1…

Qt创建列表,通过外部按钮控制列表的选中下移、上移以及左侧图标的显现

引言 项目中需要使用列表QListWidget,但是不能直接拿来使用。需要创建一个列表,通过向上和向下的按钮来向上或者向下移动选中列表项,当当前项背选中再去点击确认按钮,会在列表项的前面出现一个图标。 实现效果 本实例实现的效果如下: 实现思路 思路一 直接采用QLis…

day5 分布式节点

文章目录 1 流程回顾2 抽象 PeerPicker3 节点选择与 HTTP 客户端4 实现主流程5 main 函数测试。6 QA 本文代码地址&#xff1a; 本文是7天用Go从零实现分布式缓存GeeCache的第五篇。 注册节点(Register Peers)&#xff0c;借助一致性哈希算法选择节点。实现 HTTP 客户端&…

CTF-Web习题:[BJDCTF2020]Mark Loves cat

题目链接&#xff1a;Mark Loves cat 解题思路 访问靶机网站后得到如下页面&#xff1a; 先浏览网页&#xff0c;发现最下面有一个"dog"字样&#xff0c;此时翻看源码并没有什么发现 那就例行进行目录扫描&#xff0c;源码泄露扫描&#xff0c;用dirsearch目录扫…

威尔史密斯太太贾达平特:友谊在迷恋浪漫的世界中很重要 坦言与威尔·史密斯20多年婚姻中犯下的错误

这位威尔史密斯的太太、著名演员兼音乐家贾达萍克特史密斯 (Jada Pinkett Smith) 因其在 Facebook Watch 系列《Red Table Talk》中的直言不讳而闻名&#xff0c;她的表达方式证明了她的诚实以及她渴望说出自己的想法。 这段揭露真相的视频讲述了她与威尔史密斯 (Will Smith) …