当前位置: 首页 > news >正文

java 泛型

  1. 概述
    泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。

泛型,就是类型参数。

一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。
那么类型参数理解呢?
顾名思义,就是将原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

举个例子:

Arraylist<String> list =new ArrayList<>();

String 就是确定了list中元素类型只能是String,其他类型只能会编译器报错。

泛型的本质是为了参数化类型,(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。

也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

2.简单泛型类
就是具有几个泛型变量的类
例如:一个泛型变量T(泛型变量的个数是指尖括号中的泛型个数)

public class Pair<T>
{private T first;private T second;public T getFirst() {return first;}public void setFirst(T first) {this.first = first;}public T getSecond() {return second;}public void setSecond(T second) {this.second = second;}public Pair(T first, T second) {this.first = first;this.second = second;}}

泛型类也可以有多个类型泛型变量,例如,

public class Pair<T,U>
{...
}

用具体的类型替换泛型变量就可以实例化简单泛型类,例如:

Pair<String>

3.泛型简单方法

class ArrayALg{public static <T> T getMiddle(T... a){return a[a.length/2];}
}

这个方法是在一般类中定义的,泛型变量<T>放在 public static 后面。返回类型之前。

调用泛型方法时候,可以省略泛型的参数,编译器会从其他信息中去获取这个泛型是什么数据类型。

String middle=ArrayALg.getMiddle("a","b","c");

哪里用到了泛型,编译器会得到这个泛型的具体信息。

4.泛型变量限定
这个是计算最小值

public static <T> T min(T[] a)
{if(a==null || a.length==0return null;T smallest =a[0];for(int i=1;i<a.length;i++){if(smallest.compareTo(a[i]>0)){smallest=a[i];}return samllest;}
}

这个是比较数值,但是泛型是T,表示任何一个类的对象。那怎么去限制T的类型范围?
用关键字extends
将T的范围限制在Comparable接口

public static <T extends Comparable> T min(T[] a)...

一个泛型变量或通配符可以有很多个限定,例如:

T extends Comparable & Serializable

限定类型用&分隔,而逗号来分隔泛型变量

相关文章:

java 泛型

概述 泛型在java中有很重要的地位&#xff0c;在面向对象编程及各种设计模式中有非常广泛的应用。 泛型&#xff0c;就是类型参数。 一提到参数&#xff0c;最熟悉的就是定义方法时有形参&#xff0c;然后调用此方法时传递实参。 那么类型参数理解呢&#xff1f; 顾名思义&…...

git 查看/配置 local/global 用户名称和用户邮箱

1、--local: 本地设置&#xff08;仅对当前仓库有效&#xff09; git config --local user.name “你的名称” git config --local user.email “你的邮箱” 2、--global 全局设置&#xff08;对当前用户的所有仓库有效&#xff09; git config --global user.name “你的名称…...

无涯教程-分类算法 - 简介

分类可以定义为根据观测值或给定数据点预测类别的过程。分类的输出可以采用"黑色"或"白色"或"垃圾邮件"或"非垃圾邮件"的形式。 在数学上&#xff0c;分类是从输入变量(X)到输出变量(Y)近似映射函数(f)的任务&#xff0c;它属于有监督…...

python venv 打包,更换路径后,仍然读取到旧路径 ,最好别换路径,采用docker封装起来

机械盘路径 /home/yeqiang/code/xxx 移动到 /opt/xxx 编辑/opt/xxx/venv/bin/activate VIRTUAL_ENV"/home/yeqiang/code/xxx/venv" 改为 VIRTUAL_ENV"/opt/xxx/venv" 下面还有这么多&#xff0c;参考&#xff1a; (venv) yeqiangyeqiang-MS-7B23:/…...

MATLAB算法实战应用案例精讲-【自然语言处理】语义分割模型-DeepLabV3

目录 1、DeepLab系列简介 1.1.DeepLabV1 1.1.1创新点&#xff1a; 1.1.2. 动机&#xff1a; 1.1.3. 应对策略&#xff1a; 1.2.DeepLabV2 1.2.1.创新点&#xff1a; 1.2.2.动机 1.2.3. 应对策略&#xff1a; 1.3.DeepLabV3 1.3.1创新点&#xff1a; 1.3.2. 动机&am…...

road to master

零、学习计划 数据库相关 索引 我以为我对数据库索引很了解&#xff0c;直到我遇到了阿里面试官 - 知乎 (zhihu.com)给我一分钟&#xff0c;让你彻底明白MySQL聚簇索引和非聚簇索引 - 知乎 (zhihu.com)聚集索引&#xff08;聚类索引&#xff09;与非聚集索引&#xff08;非聚类…...

<深度学习基础> 激活函数

为什么需要激活函数&#xff1f;激活函数的作用&#xff1f; 激活函数可以引入非线性因素&#xff0c;可以学习到复杂的任务或函数。如果不使用激活函数&#xff0c;则输出信号仅是一个简单的线性函数。线性函数一个一级多项式&#xff0c;线性方程的复杂度有限&#xff0c;从…...

评价指标BLUE了解

BLEU (Bilingual Evaluation Understudy&#xff0c;双语评估基准&#xff09;是一组度量机器翻译和自然语言生成模型性能的评估指标。BLEU指标是由IBM公司提出的一种模型评估方法,以便在机器翻译领域中开发更好的翻译模型。BLEU指标根据生成的句子与人工参考句子之间的词、短语…...

5G网关如何提升智慧乡村农业生产效率

得益于我国持续推进5G建设&#xff0c;截至今年5月&#xff0c;我国5G基站总数已达284.4万个&#xff0c;覆盖全国所有地级市、县城城区和9成以上的乡镇镇区&#xff0c;实现“镇镇通5G”&#xff0c;全面覆盖了从城市到农村的延伸。 依托5G网络的技术优势&#xff0c;智慧乡村…...

微信小程序分享后真机参数获取不到和部分参数不能获取问题问题解决

微信小程序的很多API&#xff0c;都是BUG&#xff0c;近期开发小程序就遇到了分享后开发工具可以获取参数&#xff0c;但是真机怎么都拿不到参数的问题 一、真机参数获取不到问题解决 解决方式&#xff1a; 在onLoad(options) 中。 onLoad方法中一定要有options 这个参数。…...

Confluence使用教程(用户篇)

1、如何创建空间 可以把空间理解成一个gitlab仓库&#xff0c;空间之间相互独立&#xff0c;一般建议按照部门&#xff08;小组的人太少&#xff0c;没必要创建空间&#xff09;或者按照项目分别创建空间 2、confluence可以创建两种类型的文档&#xff1a;页面和博文 从内容上来…...

网络基础知识socket编程

目录 网络通信概述网络互连模型&#xff1a;OSI 七层模型TCP/IP 四层/五层模型数据的封装与拆封 IP 地址IP 地址的编址方式IP 地址的分类特殊的IP 地址如何判断2 个IP 地址是否在同一个网段内 TCP/IP 协议TCP 协议TCP 协议的特性TCP 报文格式建立TCP 连接&#xff1a;三次握手关…...

基于SpringBoot的员工(人事)管理系统

基于SpringBoot的员工&#xff08;人事&#xff09;管理系统 一、系统介绍二、功能展示三.其他系统实现五.获取源码 一、系统介绍 项目名称&#xff1a;基于SPringBoot的员工管理系统 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 前端技术&#xff1a;BootS…...

【计算机网络】序列化与反序列化

文章目录 1. 如何处理结构化数据&#xff1f;序列化 与 反序列化 2. 实现网络版计算器1. Tcp 套接字的封装——sock.hpp创建套接字——Socket绑定——Bind将套接字设置为监听状态——Listen获取连接——Accept发起连接——Connect 2. 服务器的实现 ——TcpServer.hpp初始化启动…...

Linux内核学习(七)—— 定时器和时间管理(基于Linux 2.6内核)

目录 一、内核中的时间概念 二、节拍率&#xff1a;HZ 实时时钟 系统定时器 三、定时器 系统定时器是一种可编程硬件芯片&#xff0c;能以固定频率产生定时器中断&#xff0c;它所对应的中断处理程序负责更新系统时间&#xff0c;也负责执行需要周期性运行的任务。 一、内…...

Tortoise Git(乌龟git)常用命令总结

查看全局和本地 Git 配置 打开命令行终端&#xff08;如 Git Bash&#xff09;&#xff0c;分别执行以下命令查看全局和本地的 Git 配置信息&#xff1a; git config --global -l git config --local -l确保配置中没有任何与 SSH 相关的设置 移除全局和本地 SSH 相关配置&…...

SSM商城项目实战:物流管理

SSM商城项目实战&#xff1a;物流管理 在SSM商城项目中&#xff0c;物流管理是一个重要的功能模块。通过物流管理&#xff0c;可以实现订单的配送、运输和签收等操作。本文将介绍如何在SSM商城项目中实现物流管理功能的思路和步骤代码。 实现SSM商城项目中物流管理的思路总结如…...

nlp系列(7)三元组识别(Bert+CRF)pytorch

模型介绍 在实体识别中&#xff1a;使用了Bert模型&#xff0c;CRF模型 在关系识别中&#xff1a;使用了Bert模型的输出与实体掩码&#xff0c;进行一系列变化&#xff0c;得到关系 Bert模型介绍可以查看这篇文章&#xff1a;nlp系列&#xff08;2&#xff09;文本分类&…...

Druid配置类、Dubbo配置类、Captcha配置类、Redis配置类、RestTemplate配置类

DruidConfig配置类package com.xdclass.app.config;import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.beans.factory.annotation.V…...

Pyecharts教程(十二):使用pyecharts创建带有数据缩放滑块和位置指示器的K线图

Pyecharts教程(十二):使用pyecharts创建带有数据缩放滑块和位置指示器的K线图 作者:安静到无声 个人主页 目录 Pyecharts教程(十二):使用pyecharts创建带有数据缩放滑块和位置指示器的K线图前言代码讲解总结完整代码推荐专栏前言 本博客将详细解释如何使用Python中的pyech…...

为什么企业还在用有漏洞的Weblogic?CVE-2019-2725背后的升级困境与临时解决方案

企业级Weblogic漏洞管理&#xff1a;CVE-2019-2725的实战应对策略 当安全团队第37次在周报中标注"Weblogic CVE-2019-2725漏洞亟待修复"时&#xff0c;某金融企业的CTO看着测试环境里崩溃的支付网关系统&#xff0c;默默将升级计划表又往后推了一周。这不是个案——据…...

G-Helper:开源硬件控制工具的性能优化实践指南

G-Helper&#xff1a;开源硬件控制工具的性能优化实践指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: http…...

ICP算法实战:从Point-to-Plane到VGICP,5种点云配准方法性能对比(附Python代码)

ICP算法实战&#xff1a;从Point-to-Plane到VGICP&#xff0c;5种点云配准方法性能对比&#xff08;附Python代码&#xff09; 在三维视觉和机器人领域&#xff0c;点云配准是构建环境地图、实现定位导航的基础技术。当我们需要将多个视角采集的点云数据拼接成一个完整的三维模…...

【CTF | pwn篇】从栈溢出到ROP:ctfshow pwn实战技巧精讲

1. 栈溢出基础&#xff1a;从零开始理解漏洞利用 栈溢出是PWN领域最经典的漏洞类型之一&#xff0c;也是CTF比赛中出现频率最高的题型。我们先从一个最简单的例子开始&#xff0c;看看如何利用栈溢出漏洞控制程序执行流程。 1.1 栈的结构与函数调用 当程序调用函数时&#xff0…...

李慕婉-仙逆-造相Z-Turbo跨平台GUI开发:使用Qt构建模型调参与预览桌面应用

李慕婉-仙逆-造相Z-Turbo跨平台GUI开发&#xff1a;使用Qt构建模型调参与预览桌面应用 每次看到那些功能强大的AI模型&#xff0c;你是不是也心动过&#xff1f;但一打开命令行&#xff0c;面对密密麻麻的参数和代码&#xff0c;瞬间就觉得头大&#xff0c;只想关掉窗口。对于…...

Flux Sea Studio 入门:十分钟完成星图平台镜像部署并生成首张图片

Flux Sea Studio 入门&#xff1a;十分钟完成星图平台镜像部署并生成首张图片 想试试最近很火的AI绘画&#xff0c;但又觉得本地部署太麻烦&#xff0c;显卡要求太高&#xff1f;今天咱们就来聊聊一个超级省事的办法——直接在云端用Flux Sea Studio。你不需要懂代码&#xff…...

告别抢票焦虑:用Python自动化脚本轻松获取大麦网演唱会门票

告别抢票焦虑&#xff1a;用Python自动化脚本轻松获取大麦网演唱会门票 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为心仪的演唱会门票秒光而烦恼吗&#xff1f;DamaiHelper大麦网抢票脚…...

AI技术通过aibiye爱毕业等8款智能应用,显著提升了论文撰写与代码实现的效率,为毕业设计带来创新支持

文章总结表格&#xff08;工具排名对比&#xff09; 工具名称 核心优势 aibiye 精准降AIGC率检测&#xff0c;适配知网/维普等平台 aicheck 专注文本AI痕迹识别&#xff0c;优化人类表达风格 askpaper 快速降AI痕迹&#xff0c;保留学术规范 秒篇 高效处理混AIGC内容&…...

破局RePKG使用困境:7个让效率倍增的创新工作流

破局RePKG使用困境&#xff1a;7个让效率倍增的创新工作流 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 认知重构&#xff1a;重新理解壁纸资源处理的本质 1.1 三维困境模型&…...

macOS专属方案:OpenClaw+nanobot镜像的5个效率技巧

macOS专属方案&#xff1a;OpenClawnanobot镜像的5个效率技巧 1. 为什么选择OpenClawnanobot组合 作为一个长期使用macOS的开发者&#xff0c;我一直在寻找能够提升日常工作效率的自动化工具。直到遇到OpenClaw和nanobot这个组合&#xff0c;才真正找到了适合个人使用的智能助…...