<-泛型->

news2025/5/15 20:49:10

1.泛型的概念

所谓泛型,就是允许在定义类, 接口 时通过一个"标识"表示类中某个属性的类型或者某个方法的返回值或形参类型.这个类型参数将在使用时确定.

2.举例

(1). 集合类在设计阶段/声明阶段不能确定这个容器到底存的是什么对象,所以在JDK5.0版本以前,只能把元素类型设计为Object类.JDK5.0时java引入了参数化类型的概念,允许我们在创建集合时指定集合元素的类型.(如List<String>表示该List只能存放String类型的数据.)

使用集合存储数据时,除了元素的类型不确定,其他部分都是确定的.

(2). java.lang.Comparable接口和java.util.Comparator接口,是用于比较对象大小的接口.这两个接口只是限制了当一个对象大于另一个对象时返回正整数,等于返回0,否则返回负整数.但并不确定是什么类型的对象比较大小.jdk5.0之前只能用Object类型表示,即麻烦(可能需要强制类型转换)又不安全(可能比较的两个对象并不是同一类型).故jdk5.0给它们增加了泛型.

3.集合在未使用泛型前可能存在的问题

  • 类型不安全.add(Object obj)形参类型是Object,意味着任何类型的对象都可以被放入到集合中.
  • 需要强转操作,繁琐.还可能出现异常.

4.使用说明

(1). 我们在声明完自定义泛型类后,可以在类的内部(如属性,构造器,方法)使用类的泛型.

public class Order<T>{//泛型类
    T t;//属性

    public Order() {
    }

    public Order(T t) {//构造器
        this.t = t;
    }
    public T show() {
        return t;//方法
    }
}

(2). 我们在创建自定义泛型类的对象时,可以指明泛型参数类型.一旦指明,内部凡是使用类的泛型参数的位置,都具体化为指定的类的泛型类型.

(3). 如果在创建自定义泛型类的对象时,没有指明泛型参数类型,那么泛型将被擦除,泛型对应的类型都按照Object处理,但不等价于Object.

524b7347340542ceba5e74b9ee761908.png

2cb59d49f8294c1691e57a48a8cee8a8.png

(4). 泛型的指定类型必须使用引用数据类型,不能使用基本数据类型,此时智能使用包装类.

Order<int> o = new Order<>();//错     Order<Integer> o = new Order<>();//正确

(5). 除了创建泛型类的对象外,子类继承泛型类时,实现类实现泛型接口时,也可以确定泛型结构的泛型参数.如果我们在给泛型提供子类时,子类也不确定泛型的类型,则继续可以使用泛型参数,我们还可以在现有父类的泛型参数的基础上,新增泛型参数.

public class SubOrder<T1, T2> extends Order<String>{
    T1 data1;
    T2 data2;
}

5.注意事项

(1). 泛型类可能有多个参数,可以将多个参数都放到尖括号内,如(<T1, T2, T3>).

(2). 从jdk7.0开始,可以简化泛型操作 : 

Order<String> o =new Order<String>();//以前

Order<String> o =new Order<>()//jdk7.0之后.

(3). 如果泛型结构是一个接口或抽象类,则不可以创建对象.

(4). 不能使用new T[](因为此时new对象的时候并不知道T的类型,所以无法为其分配内存),但可以使用

T[] element =(T[]) new Object[10];//强制类型转换

(5). 在类/接口上声明的泛型,在本类或本接口中代表某种类型,但不可以在静态方法中使用泛型.(原因也很简单,因为静态方法随着类的加载而加载,而泛型的类型等到创建对象时才能确定,所以此时泛型的类型还是未知的)

(6). 异常类是不可以带泛型的.

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

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

相关文章

蓝桥杯PythonB组练习——矩形面积交

一、题目 问题描述   平面上有两个矩形&#xff0c;它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形&#xff0c;我们给出它的一对相对顶点的坐标&#xff0c;请你编程算出两个矩形的交的面积。 输入格式   输入仅包含两行&#xff0c;每行描述一个矩形。   在每行中…

Python 新手最容易踩的坑

Python新手最容易踩的坑 缩进错误忘记引入模块使用未定义的变量不理解变量作用域字符串格式化错误乱用关键字多余的符号本期图书推荐&#xff1a;Python算法小讲堂---39个算法案例带你玩转Python内容简介获取方式 在学习 Python 的过程中&#xff0c;新手往往会遇到一些常见的陷…

HarmonyOS开发实例:【分布式数据管理】

介绍 本示例展示了在eTS中分布式数据管理的使用&#xff0c;包括KVManager对象实例的创建和KVStore数据流转的使用。 通过设备管理接口[ohos.distributedDeviceManager]&#xff0c;实现设备之间的kvStore对象的数据传输交互&#xff0c;该对象拥有以下能力 ; 1、注册和解除注…

SpringBoot菜品分页查询模块开发(多表连接查询)

需要注意的地方 为什么创建VO类怎么进行多表连接查询分页查询的统一返回结果类PageResult分页查询Mapper的返回结果是Page<目标实体类> 需求分析与设计 一&#xff1a;产品原型 系统中的菜品数据很多的时候&#xff0c;如果在一个页面中全部展示出来会显得比较乱&…

力扣HOT100 - 238. 除自身以外数组的乘积

解题思路&#xff1a; 当前位置的结果就是它左部分的乘积再乘以它右部分的乘积。因此需要进行两次遍历&#xff0c;第一次遍历用于求左部分的乘积&#xff0c;第二次遍历在求右部分的乘积的同时&#xff0c;再将最后的计算结果一起求出来。 class Solution {public int[] prod…

Transformer详解和知识点总结

目录 1. 注意力机制1.1 注意力评分函数1.2 多头注意力&#xff08;Multi-head self-attention&#xff09; 2. Layer norm3. 模型结构4. Attention在Transformer中三种形式的应用 论文&#xff1a;https://arxiv.org/abs/1706.03762 李沐B站视频&#xff1a;https://www.bilibi…

(学习日记)2024.04.05:UCOSIII第三十三节:互斥量

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

SpringBoot第一个hello world项目

文章目录 前言一、Spring Boot是什么&#xff1f;二、使用步骤1. 创建项目2.书写测试 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了…

DRL-VWAP算法

摘要 在量化策略的交易端&#xff0c;为了更好的扩大策略的资金容量必须要考虑策略冲击陈本的降低。本文梳理了传统 VWAP 存在的诸多弊端&#xff0c;主要在于对于日内交易信息的缺失与忽略市场行情的影响。本文梳理了传统VWAP 算法存在的主要弊端&#xff0c;并改写了传统 VW…

20240409在全志H3平台的Nano Pi NEO CORE开发板运行的Ubuntu Core更新boot.img(eMMC启动)

20240409在全志H3平台的Nano Pi NEO CORE开发板运行的Ubuntu Core更新zImage内核 2024/4/9 9:21 一、生成zImage: 参考资料&#xff1a; http://wiki.friendlyelec.com/wiki/index.php/NanoPi_NEO_Core/zh#.E7.83.A7.E5.86.99.E5.88.B0eMMC NanoPi NEO Core/zh 6 FriendlyCore…

【leetcode面试经典150题】37. 矩阵置零(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

大数据相关组件安装及使用

自学大数据相关组件 持续更新中。。。 一、linux安装docker 1、更新yum sudo yum update2、卸载docker旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine3、…

菜鸟IPO折戟背后:估值大幅下降,阿里巴巴为“分拆之痛”买单

撰稿|行星 来源|贝多财经 近日&#xff0c;阿里巴巴集团&#xff08;下称“阿里巴巴”或“阿里”&#xff09;发布公告&#xff0c;称其物流子公司菜鸟&#xff08;同菜鸟物流、菜鸟网络&#xff09;撤回在港交所的首次公开发行及上市申请&#xff0c;并计划收购菜鸟少数股东…

LeetCode31. 下一个排列(Java)

题目&#xff1a; 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列…

鸿蒙实战开发-如何实现查看系统相册、最近删除、收藏夹操作功能

介绍 本示例主要展示了相册相关的功能&#xff0c;使用ohos.file.photoAccessHelper 接口&#xff0c;实现了查看系统相册、创建用户相册、查看相册照片、用户相册文件添加和删除、以及预览图片、最近删除、收藏夹操作等功能; 效果预览 使用说明 主界面&#xff1a;查询显示…

一本想教会你滤波算法书

一本想教会你滤波算法书 从今天开始&#xff0c;这个博客系列会翻译一本 500 页左右的滤波算法的书&#xff0c;该书的原文连接我会放到后面的文中。翻译这本书不仅能继续我的英语学习&#xff08;水平有限&#xff0c;有问题我留言我马上改&#xff01;&#xff09;而且可以跟…

如何合理利用Vue 3中的ref和reactive

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

大话设计模式——24.迭代器模式(Iterator Pattern)

简介 提供一种方法顺序访问一个聚合对象中各个元素&#xff0c;而又不暴露该对象的内部实现。&#xff08;Java中使用最多的设计模式之一&#xff09; UML图 应用场景 Java的集合对象&#xff1a;Collection、List、Map、Set等都有迭代器Java ArrayList的迭代器源码 示例 简…

堆 和 优先级队列

目录 一、堆 二、优先级队列 1、初识优先级队列 2、实现一个优先级队列 3、PriorityQueue &#xff08;1&#xff09;实现了Comparable接口&#xff0c;重写了compareTo方法 &#xff08;2&#xff09;实现了Comparator接口&#xff0c;重写了compare方法 4、 Prio…

WordPress 图片压缩插件:Compress JPEG PNG images 使用方法

插件介绍 Compress JPEG & PNG images是一款非常好用的图片压缩插件:&#xff0c;非常值得大家安装使用&#xff1b;特别是图片类型网站。其实我们很多服务器磁盘空间是不在乎多那么几十 MB 大小的&#xff0c;但是压缩了图片能提升网站速度&#xff0c;节省宽带&#xff…