一、初识泛型

在推出泛型以前,程序员可以创建一个元素类型Object的集合,该集合能够存储任意的数据类型对象,而在使用该集合的过程中,需要明确知道存储每个元素的类型,否则容易引发ClassCastException异常。

泛型是JDK1.5引入的新语法,通俗讲,泛型:就是适用于许多许多类型。从代码讲,就是对类型实现了参数化

JAVA为什么推出泛型?

当Integer类型转换成String型时,会发生类型转换错误,并且编译时不会发生错误,很容易项目上线时,发生报错,为了应对这种情况,推出了泛型。

泛型的概念?

Java泛型时JDK5引入的一个新特性,泛型提供了编译时类型安全监测机制,该机制允许我们编译时检测到非法的类型数据结构

泛型的优点?

1.编译时,类型检查

2.编译时,类型转换

注意:泛型只存在编译时,运行时不存在泛型这个概念,同时泛型只能接收包装类型,不能接受普通类型

实现了一类,类中包含了一个数组成员,使得数组中可以存放任何类型的数据,也可以根据成员方法返回数组中某个下标的值

二、泛型类、接口

泛型类的语法

  Generic.java

package demo;
/*
@param<T>泛型标识————类型形参T 创建对象的时候里指定具体的数据类型
*/public class Generic<T>
{private T key;public Generic(T key){this.key = key;}public T getKey() {return key;}public void setKey(T key) {this.key = key;}@Overridepublic String toString() {return "Generic{" +"key=" + key +'}';}
}

  MainClass.java

public class MainClass {public static void main(String[] args) {//泛型类在创建对象的时候,来具体类型Generic<String> strGeneric = new Generic("a");String k1 = strGeneric.getKey();System.out.println(k1);System.out.println("---------------------------------");Generic<Integer> integerGeneric = new Generic<>(123123213);int key2 = integerGeneric.getKey();System.out.println(key2);System.out.println("-------------------------");Generic gen = new Generic();//"当我们不对其使用泛型指定类型时,里面可存储的值可以为类型类型"}
}f

注意:

泛型不支持基本数据类型,只支持类类型

引用类型无法通过大于和小于进行比较

泛型类型逻辑上可以看作不同类型,实际上都是相同类型

三、泛型的接口

泛型接口的定义语法

Interface 接口名称<泛型标识,泛型标识,...>{

泛型标识 方法名();

}

实现泛型接口的类,不是泛型类,需要明确实现泛型接口的数据类型。

四、泛型方法

前面我们知道,泛型类,是在实例化类的时候指明泛型的具体类型;而泛型方法,是在调用方法的时候指明泛型的具体类型。

最重要的一点我们之前使用的方法,其实只是实参是泛型参数的普通方法,并不叫做泛型方法。

 
public class xx<T>
{
private T key;
Public T setKey(T key)
{this.key = key;
} 
Public T getKey()
{return key;}
}

定义一个泛型方法需要在返回值前面定义一个<>,里面填入泛型参数,T E ... 等等泛型参数

Public 与返回键中间<T>非常重要,可以理解为声明此方法为泛型方法

只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。

<T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T

泛型方法与可变参数

为什么静态方法访问不了类上的泛型参数

这是因为,我们在指定泛型参数的具体类型时,是在实例化该类时指定的,实例化后和类型有关,所以静态方法和静态属性访问 泛型参数,必须在static后添加<T,E......>

五、类型通配符

类型通配符一般是使用”?“代替具体实参类型

所以,类型通配符是类型实参,而不是类型形参。

  Box.java

 
  package Demo01;public class Box<E> {private E first;public E getFirst() {return first;}public void setFirst(E first) {this.first = first;}}

  Test.java

 
package Demo01;
public class Test {public static void main(String[] args) {Box<Number> box1= new Box<>();box1.setFirst(100);showBox(box1);Box<Integer> box2 = new Box<>();box2.setFirst(200);showBox(box2);}public static void showBox(Box<?> box){Object first = box.getFirst();System.out.println(first);}
}

六、类型擦除

编译阶段,编译器会进行类型检测, 一旦通过编译检测,进入运行阶段,此时泛型这个概念就会消失,通常我们说的,泛型只停留在编译阶段就是这个道理,所有的对象都属于普通类,所以下面这段代码的运行结果为true.

类型参数带来了许多弊端

①、不支持基本类型

②、只有原始类型class

③、不能实例化类型参数

④、不能实例化泛型数组

七、类型的上界

这个地方意味着T必须实现他的上界Comparabe<T>接口
class Alg<T extends Comparable<T>>
{public T findMax(T[] array){T max = array[0];for (int i = 0; i < array.length; i++) {if(max.compareTo(array[i]) < 0){max = array[i];}}return max;}}
public class Test {public static void main(String[] args) {Alg<Integer> alg = new Alg<>();Integer[] array = {1,5,2,7,19,4};Integer max = alg.findMax(array);System.out.println(max);}
}

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

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

相关文章

赋能 Java 工程,飞算科技重新定义智能开发

在数字经济蓬勃发展的当下&#xff0c;软件开发行业正经历着前所未有的变革。飞算科技作为一家自主创新型的数字科技公司&#xff0c;始终以互联网科技、大数据、人工智能等前沿技术为根基。凭借团队在相关领域多年积累的深厚实践经验&#xff0c;公司深度融合技术与应用&#…

【蓝牙】Linux Qt4蓝牙设备列表刷新加载采用什么策略,使用什么对应的Linux命令或dbus接口

在 Linux 系统中&#xff0c;使用 Qt4 开发蓝牙设备列表刷新功能时&#xff0c;通常会结合 BlueZ 蓝牙协议栈 和 D-Bus 通信机制 实现对蓝牙设备的发现与管理。以下是常见的实现策略和对应的命令或接口。 &#x1f9e9; 一、蓝牙设备列表刷新策略 1. 主动扫描&#xff08;Scan…

产品背景知识——CIFS、SMB 和 Samba

产品背景知识——CIFS、SMB 和 Samba 1. SMB&#xff08;Server Message Block&#xff09; 定义&#xff1a; SMB 是一种网络协议&#xff0c;用于在计算机之间共享文件、打印机、串口等资源。它由 IBM 在 1980 年代开发&#xff0c;后被微软采用并扩展。 发展历程&#xff…

基于Python的GIS-RS多源数据处理(TIF/SHP/NC/...)【20250630】

栅格数据以规则网格(像素)的数值矩阵表达地理现象&#xff0c;每个单元格代表一个属性值(如高程、温度)。例如卫星影像、数字高程模型、温度分布图。存储格式包括ENVI DAT、GeoTIFF、JPEG、PNG、ASCII Grid等等。 矢量数据是通过几何图形(点、线、面)表示地理实体&#xff0c;…

基于yolov5的深度学习的昆虫检测带QT界面

完整项目查看或想了解其他项目点击文末名片 项目简介 本项目旨在开发一个基于深度学习的昆虫检测与识别系统。系统使用两个主要模块&#xff1a;昆虫检测器&#xff08;InsectDetector&#xff09;和昆虫识别器&#xff08;InsectIdentifier&#xff09;。首先&#xff0c;昆虫…

linux使用1

1.终端查看ip地址 # windows ipconfig# linux ifconfig2.VMware共享文件夹权限设置下如何复制/移动文件 # 移动: mv # 查看当前文件夹: ls # 设置管理员权限&#xff1a; sudo # 复制&#xff1a; cp#情景一&#xff1a;移动桌面文件夹&#xff08;desktop/day4/server/)到共…

ACE之ACE_NonBlocking_Connect_Handler问题分析

问题 ACE_NonBlocking_Connect_Handler在处理异步时存在问题 分析 当connect选择的同步参数为ACE_Synch_Options::USE_REACTOR时&#xff0c;连接超时时间为ACE_Time_Value::zero&#xff0c;在同步发起连接返回的错误码为EWOULDBLOCK时&#xff0c;会发起异步连接nonblocki…

『uniapp』i18n 国际化(保姆级图文)

目录 预览效果项目根目录新建i18n文件夹安装vue-i18n 指定版本main.js 中引入i18n页面展示总结欢迎关注 『uniapp』 专栏,持续更新中 欢迎关注 『uniapp』 专栏,持续更新中 预览效果 中文 英文 项目根目录新建i18n文件夹 其中各个语言的json文件

P1967 [NOIP 2013 提高组] 货车运

题目背景 NOIP2013 提高组 D1T3 题目描述 A 国有 n n n 座城市&#xff0c;编号从 1 1 1 到 n n n&#xff0c;城市之间有 m m m 条双向道路。每一条道路对车辆都有重量限制&#xff0c;简称限重。 现在有 q q q 辆货车在运输货物&#xff0c; 司机们想知道每辆车在不…

【软考高项论文】论信息系统项目的沟通管理

摘要 在信息系统项目的实施进程中&#xff0c;沟通管理的重要性不言而喻。有效的沟通不仅能保证项目信息准确传递&#xff0c;还能推动团队协作&#xff0c;提高项目整体效率。本文结合 2024 年 6 月我所参与的信息系统项目&#xff0c;围绕项目沟通管理的过程及项目干系人管理…

浪潮和曙光服务器的ipmi配置教程

配置浪潮SA5212M5服务器 1、启动服务器按DEL按键进入服务器bios 2、选择Server Mgmt菜单中的BMC Network Configuration配置项回车。 3、BMC Network Configuration配置项中的Get BMC Dedicated Parameters选择Manual&#xff08;手动配置&#xff09; 4、BMC Network Configu…

Golang 标准库errors用法

Go语言的标准库中的errors包提供了一些用于创建和操作错误的基本功能。下面是对该包的详细用法说明。 基本用法 创建错误 使用errors.New函数创建一个新的错误对象。errors.New接受一个字符串参数作为错误信息&#xff0c;并返回一个实现了error接口的对象。 package mainimpo…

搭建自己的WEB应用防火墙

搭建自己的WEB应用防火墙 之前给客户搭建的网站服务近期频繁遭受恶意扫描、暴力破解攻击&#xff0c;日志里记录着各种奇葩的请求地址&#xff0c;导致Tomcat线程资源耗尽&#xff0c;最终nginx报504&#xff08;网关超时&#xff09;&#xff0c;在服务器上curl本地请求依然卡…

MySQL:CRUD操作

目录 XML模版一、结果返回集二、查询三、查询详情四、新增4.1 不含逗号4.1 含逗号 五、修改5.1 不含逗号5.2 含逗号 六、删除 XML模版 xml <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3…

智慧园区综合管理平台:提升园区运营效能的核心利器

在数字化浪潮席卷各个领域的当下&#xff0c;智慧园区的建设成为了推动产业升级、提升管理效率和服务质量的关键举措。而综合管理平台作为智慧园区的 “大脑”&#xff0c;整合了园区运营的各类功能&#xff0c;为园区管理者和企业提供了全方位的支持。本文将基于一份智慧园区功…

碰一碰发视频源码搭建,支持OEM

在数字化生活日益普及的今天&#xff0c;便捷的信息传输方式成为用户的迫切需求。“碰一碰发视频” 功能凭借其新颖的交互体验和高效的数据传输特性&#xff0c;在社交分享、文件传输等场景中备受青睐。本文将深入探讨碰一碰发视频源码搭建的定制化开发流程&#xff0c;涵盖核心…

Walrus为数据存储带来可编程性

要点总结 Walrus 是下一代去中心化存储协议&#xff0c;旨在突破传统中心化云存储的局限&#xff0c;如高昂成本、单点故障、审查和隐私风险等&#xff0c;同时相较于其他去中心化存储系统也做出了诸多创新&#xff0c;尤其是在可编程性与性能上的提升。“blob” 即 Binary La…

React:利用计算属性名特点更新表单值

需求&#xff1a;三个input框&#xff0c;在input框输入时候&#xff0c;获取最新值&#xff0c;进行数据更新 思路&#xff1a;name属性的变量设置的和表单的变量一样&#xff0c;方便通过name属性更新值 function TenantManage() {const [formData, setFormData] useState…

【软考高项论文】论信息系统项目的范围管理

摘要 在信息系统项目管理里&#xff0c;范围管理极为关键。有效的范围管理可保障项目按时、按质、按量完成&#xff0c;避免变更带来的混乱与成本超支。本文结合作者参与的一个 2024 年 3 月启动的信息系统项目&#xff0c;详细阐述项目范围管理的过程&#xff0c;包括范围规划…

盖雅工场 2025 香港 SAP NOW 大会深度解析:AI 重构亚太劳动力管理数字化生态

一、前沿技术亮相&#xff1a;AI 驱动人力资源数字化转型全景展示 在 6 月 13 日举办的 2025 香港 SAP NOW 大会上&#xff0c;亚太劳动力管理领军企业盖雅工场&#xff08;GaiaWorks&#xff09;以「AI 劳动力管理」为核心&#xff0c;通过主题演讲与沉浸式展台演示&#xf…