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

泛型类接口方法学习

一、泛型

1 概念

泛型(Generics),广泛的类型。最大用途是给集合容器添加标签,让开发人员知道容器里面放到是什么类型,并且自动对放入集合的元素进行类型检查。

类比实参和形参,我们在对方法中的变量操作时,并没有指明变量的实际大小,而是使用变量名来指代。泛型就是这个情况下诞生的,通过符号来指代类型,等方法调用传入实参时才会明确具体类型。

//当使用这个类时,再指明T的类型
class MyClass<T>{T obj;public T getObj(){return obj;}public void setObj(T obj){this.obj = obj;}
}public class Demo{public static void main(){//指明类型是StringMyClass<String> stringClass = new MyClass<>();//指明类型是DoubleMyClass<Double> stringClass = new MyClass<>();//指明类型是IntegerMyClass<Integer> stringClass = new MyClass<>();}
}

总的来说,泛型就是一个参数,是类型的参数。泛型的作用:把运行时可能存在的强制类型转换风险提前到编译期解决,并简化了代码。

2 声明位置和使用位置

  • 泛型类
    • 声明位置:类名 <T>
    • 可以使用的位置:
      • 成员变量类型
      • 非静态成员方法的返回值类型
      • 非静态成员方法的参数类型
  • 泛型接口
    • 声明位置:接口名 <T>
    • 两种使用情况:
      • class ClassA implements 接口名<类型名称>, 实现类不再是泛型类
      • class ClassB<T> implements 接口名<T>, 实现类还是泛型类
  • 泛型方法
    • 声明位置:public static <T> 返回值类型 方法名(T t)
    • 使用位置:只能在方法域内部使用
    • 示例:public static <T> T show(T t) : 传入什么类型,就返回什么类型

3 使用的注意事项

  • 静态域内部不能使用泛型
  • 使用泛型类时,必须明确泛型类型
  • 使用泛型对象时,可以省略右边的泛型类型,但是不能少了<>
  • 如果使用泛型类时没有指明类型,默认是Object类型

4 通配符

  • <?> 表示任意的泛型类型
    跟原先的T有些区别,原先的T的类型对应的是调用时传入的类型。方法泛型需要再返回值前面定义。即public static <T> 返回值类型 方法名(T t),所以T类似于一个中转站。
  • <? extends A> 设定类需要继承父类A,即上限
  • <? super B> 设定类需要是子类B的父类,即下限

应用场景:

  • 设置下限:最小也肯定是动物。最大可能是Object。通常用于添加数组,不适合获取数据
void test1(List<? super Animal> list){//适合添加数据list.add(new Animal());list.add(new Cat())//不适合获取,得到数据后也要强制类型转换Object o = list.get(0);
}
  • 设置上限:获取到的肯定是动物的子类,最大也是动物类
void test1(List<? extends Animal> list){//适合获取数据Animal a = list.get(0);//不能添加数据list.add(new );//无法确定添加什么类型的数据
}
  • <?>不适合获取,也不能添加,通常用于翻转,复制等操作。

5 通配符<?>和泛型参数T的区别

通配符<?>和泛型参数T的区别在于使用的场景和限制。 通配符<?>是一种不确定的类型,可以用来表示任意类型。它可以在方法的参数和返回值类型中使用,用来增加灵活性,使方法可以接受不同类型的参数。
泛型参数T是一种确定的类型,可以在类、方法、接口等定义中使用,用来指定某种具体的类型。它可以使代码更加安全和类型正确,并提供编译时的类型检查。

具体区别如下:

  1. 使用范围:通配符<?>可以在方法的参数和返回值类型中使用,可以接受不同类型的参数。而泛型参数T可以在类、方法、接口等定义中使用,用来指定某种具体的类型。
  2. 灵活性:通配符<?>可以接受任意类型的参数,因此在方法的定义中可以处理多种不同类型的参数。而泛型参数T是一种确定的类型,只能处理指定的类型。
  3. 类型推断:通配符<?>在方法调用时无法推断具体的类型,需要手动指定或进行类型转换。而泛型参数T在方法调用时可以根据实际参数类型自动推断具体的类型,不需要手动指定。
  4. 限制:通配符<?>无法获取具体的类型信息,只能进行简单的操作。而泛型参数T可以通过反射等方式获取具体的类型信息,进行更复杂的操作。

总之,通配符<?>和泛型参数T在使用场景、灵活性和类型推断等方面有所不同。选择使用哪种方式取决于具体的需求和代码逻辑。

相关文章:

泛型类接口方法学习

一、泛型 1 概念 泛型(Generics)&#xff0c;广泛的类型。最大用途是给集合容器添加标签&#xff0c;让开发人员知道容器里面放到是什么类型&#xff0c;并且自动对放入集合的元素进行类型检查。 类比实参和形参&#xff0c;我们在对方法中的变量操作时&#xff0c;并没有指…...

Docker自动化部署安装(十)之安装SonarQube

这里选择的是&#xff1a; sonarqube:9.1.0-community (推荐使用) postgres:9.6.23 数据库(sonarqube7.9及以后便不再支持mysql&#xff0c;版本太低的话里面的一些插件会下载不成功的) 1、docker-sonarqube.yml文件 version: 3 services:sonarqube:container_name: sonar…...

[QT/C++]如何得知鼠标事件是由触摸事件转换而来的,使得鼠标触摸事件分离

依据来源&#xff1a;https://doc.qt.io/qt-5/qml-qtquick-mouseevent.html 具体是在event事件或者mouse系列事件中捕获到鼠标事件后&#xff0c;用如下代码判断鼠标事件是否由触摸事件转换而来的 if(mouseEvent->source()Qt::MouseEventSynthesizedBySystem){qDebug()<&…...

消防态势标绘工具,为消防基层工作助力

背景介绍 无人机测绘技术在消防领域的应用越来越普及&#xff0c;高清的二维正射影像和倾斜摄影实景三维模型能为消防态势标绘提供高质量的素材&#xff0c;消防队急需一个简便易用的、能够基于这些二三维的高清地图成果进行态势标绘的工具软件&#xff0c;使得消防“六熟悉”…...

网络协议栈-基础知识

1、分层模型 1.1、OSI七层模型 1、OSI&#xff08;Open System Interconnection&#xff0c;开放系统互连&#xff09;七层网络模型称为开放式系统互联参考模型 &#xff0c;是一个逻辑上的定义&#xff0c;一个规范&#xff0c;它把网络从逻辑上分为了7层。 2、每一层都有相关…...

[Mongodb 5.0]聚合操作

本文对应Aggregation Operations — MongoDB Manual 正文 此章节主要介绍了Aggregation Pipeline&#xff0c;其实就是将若干个聚合操作放在管道中进行执行&#xff0c;每一个聚合操作的结果作为下一个聚合操作的输入&#xff0c;每个聚合指令被称为一个stage。 在正式开始学…...

Shell 变量

Shell 变量 定义变量时&#xff0c;变量名不加美元符号&#xff08;$&#xff0c;PHP语言中变量需要&#xff09;&#xff0c;如&#xff1a; your_name"runoob.com" 注意&#xff0c;变量名和等号之间不能有空格&#xff0c;这可能和你熟悉的所有编程语言都不一样…...

SRM订单管理:优化供应商关系

一、概述SRM订单管理的概念&#xff1a; SRM订单管理是指在供应商关系管理过程中&#xff0c;有效管理和控制订单的创建、处理和交付。它涉及与供应商之间的沟通、合作和协调&#xff0c;旨在实现订单的准确性、可靠性和及时性。 二、SRM订单管理的流程&#xff1a; 1. 订单创…...

Unity 实现2D地面挖洞!涂抹地形(碰撞部分,方法二)

文章目录 前言一、初始化虚拟点1.1点结构:1.2每个点有的状态:1.3生成点结构: 二、实例化边缘碰撞盒2.1计算生成边缘碰撞盒 三、涂抹部分3.1.虚拟点3.2.鼠标点3.3.内圈3.4.外圈 四、关于优化结语: 前言 老规矩先上效果图 继上一篇涂抹地形文章讲解发出后&#xff0c;有不少网友…...

简化Gerber数据传输过程丨GC PowerPlace简介

离线编程&#xff0c;保持高效 GC PowerPlace提供了客户驱动的增强功能和新功能&#xff0c;以简化Gerber数据传输过程。GC PowerPlace是汇编编程的焦点&#xff0c;它接受几乎任何来源的数据&#xff0c;并为大多数PCB制造应用程序生成程序和文件。 功能特征 01、主要特点 …...

rust关于项目结构包,Crate和mod和目录的组织

rust 最近开始学习rust语言。感觉这门语言相对java确实是难上很多。开几个文章把遇到的问题记录一下 rust关于包&#xff0c;Crate 关于包&#xff0c;Crate这块先看看官方书籍怎么说的 crate 是 Rust 在编译时最小的代码单位。如果你用 rustc 而不是 cargo 来编译一个文件…...

如何微调优化你的ChatGPT提示来提高对话质量

ChatGPT会话质量很大程度上取决于微调优化提示的艺术。本文旨在阐明微调提示的复杂性&#xff0c;以确保你可以充分发挥ChaGPT这一颠覆性工具的潜力。 与ChatGPT对话的关键部分是“提示”。即&#xff1a;你输入的问题或陈述&#xff0c;它决定了人工智能的响应。类似于引导对…...

微信小程序实现下拉刷新

一、设置微信小程序所有页面都可以下拉刷新 1、在app.json的"window"中进行配置 &#xff08;1&#xff09;把"backgroundTextStyle":“light"改为"backgroundTextStyle”:“dark” &#xff08;2&#xff09;添加"enablePullDownRefresh…...

一、编程规约

一、编程规约 &#xff08;一&#xff09;命名风格 不以下划线&#xff08;_&#xff09;或美元符号($)开始和结束不用中文拼音避免歧视或侮辱性词语类名用UpperCamelCase风格&#xff0c;以下情况例外&#xff1a;DO/PO/DTO等方法名、参数名、成员变量、局部变量使用lowerCam…...

pytest数据驱动 pandas

pytest数据驱动 pandas 主要过程&#xff1a;用pandas读取excel里面的数据&#xff0c;然后进行百度查询&#xff0c;并断言 pf pd.read_excel(data_py.xlsx, usecols[1,2])print(pf.values)输出&#xff1a;[[‘听妈妈的话’ ‘周杰伦’] [‘遇见’ ‘孙燕姿’] [‘伤心太平…...

Modbus工业RFID设备在自动化生产线中的应用

传统半自动化生产线在运作的过程&#xff0c;因为技工的熟练程度&#xff0c;专业素养的不同&#xff0c;在制造过程中过多的人为干预&#xff0c;工厂将很难对每条生产线的产能进行标准化管理和优化。如果半自动化生产线系统是通过前道工序的作业结果和检测结果来决定产品在下…...

见证马斯克的钞能力,AI.com再次易主,OpenAI投掷1100万美金购买AI.com刚满五个月

我们又一次见证了马斯克的钞能力。上次是去年他用440亿美元买下推特。 高价值的AI.com域名在2021年易主后&#xff0c;闲置过一段时间&#xff0c;今年2月份突然重定向到ChatGPT。 对于ChatGPT用户来说&#xff0c;每次访问都要在浏览器里敲这些字符&#xff1a;https://chat.o…...

linux vi/vim

目录 什么是 vim&#xff1f;vi/vim的使用命令模式输入模式底线命令模式工作模式总结 vi/vim按键说明一般模式可用的光标移动、复制粘贴、搜索替换等移动光标搜索替换删除、复制与粘贴 指令行模式可用的按钮储存、离开等指令vim 环境的变更 所有的 Unix Like 系统都会内建 vi 文…...

算法与数据结构-哈希算法

文章目录 什么是哈希算法哈希算法的应用安全加密唯一标识数据校验散列函数负载均衡数据分片分布式存储 一致性哈希算法 什么是哈希算法 哈希算法的定义和原理非常简单&#xff0c;基本上一句话就可以概括了。将任意长度的二进制值串映射为固定长度的二进制值串&#xff0c;这个…...

企业做直播时如何选择适合自己的直播平台?

企业做直播时如何选择适合自己的直播平台&#xff1f; 可以通过对比不同直播平台的技术能力、服务质量、安全性等方面的内容&#xff0c;选择最适合自己的直播平台。 企业做直播如何选择直播平台 我的文章推荐&#xff1a; [视频图文] 线上研讨会是什么&#xff0c;企业对内对…...

AI 输出 Token 优化:文言文极简模式的实践

AI 输出 Token 优化&#xff1a;文言文极简模式的实践在 AI 应用开发中&#xff0c;token 消耗直接影响成本。HagiCode 项目通过 SOUL 系统实现了"文言文极简输出模式"&#xff0c;在不损失信息密度的前提下&#xff0c;将输出 token 降低约 30-50%。本文分享这套方案…...

CEEMDAN-VMD-Transformer-GRU二次分解+编码器+门控循环单元多元时间序列预测

一、研究背景 实际工程与科学数据&#xff08;如振动信号、电力负荷、金融时序&#xff09;常呈现非线性、非平稳特征&#xff0c;单一预测模型难以充分提取多尺度信息。为此&#xff0c;结合自适应信号分解&#xff08;CEEMDAN、VMD&#xff09;与深度学习&#xff08;Transfo…...

算法分析与设计

欢迎来到我的软考中级——软件设计师备考合集。这里不只是一份简单的知识点堆砌&#xff0c;而是我在备考征途中&#xff0c;对庞杂知识体系进行深度梳理与内化的结晶。 面对浩瀚的考纲&#xff0c;从计算机组成原理的底层逻辑&#xff0c;到操作系统的进程调度&#xff1b;从数…...

深入解析build.prop:从基础参数到高级定制指南

1. build.prop文件到底是什么&#xff1f; 第一次在Android系统目录里看到build.prop这个文件时&#xff0c;我也是一头雾水。这玩意儿看起来就像个普通的文本文件&#xff0c;但里面密密麻麻的参数却让人望而生畏。后来才发现&#xff0c;它其实是Android系统的"身份证&q…...

从频谱仪读数到测试报告:深入理解dBμV/m、dBm这些单位在EMC辐射发射测试中的真实含义

从频谱仪读数到测试报告&#xff1a;深入理解dBμV/m、dBm这些单位在EMC辐射发射测试中的真实含义 在电磁兼容&#xff08;EMC&#xff09;测试实验室里&#xff0c;工程师们每天都要面对频谱分析仪上跳动的数字——那些以dBμV/m、dBm为单位的读数&#xff0c;直接决定着产品能…...

MinIO管理界面卡在Loading?别慌,Nginx反向代理漏了这几行WebSocket配置

MinIO管理界面卡在Loading&#xff1f;Nginx反向代理的WebSocket配置详解 当你通过Nginx反向代理访问MinIO管理界面时&#xff0c;发现页面一直卡在Loading状态&#xff0c;这可能是许多运维工程师都遇到过的问题。上周我在客户的生产环境部署中就遇到了这个典型的"陷阱&q…...

FNF-PsychEngine完全指南:从零开始打造你的音乐游戏

FNF-PsychEngine完全指南&#xff1a;从零开始打造你的音乐游戏 【免费下载链接】FNF-PsychEngine Engine originally used on Mind Games mod 项目地址: https://gitcode.com/gh_mirrors/fn/FNF-PsychEngine FNF-PsychEngine是一款功能强大的Friday Night Funkin开源游…...

多页原理图设计救星:用AD端口交叉引用快速定位信号流向(含Ctrl跳转技巧)

多页原理图设计救星&#xff1a;用AD端口交叉引用快速定位信号流向&#xff08;含Ctrl跳转技巧&#xff09; 在复杂的PCB设计项目中&#xff0c;多页原理图往往让工程师们头疼不已。想象一下&#xff0c;当你面对一个包含数十张图纸的设计&#xff0c;需要追踪某个信号从输入到…...

利用快马平台快速将notepad++笔记构思转化为可交互网页应用原型

今天想和大家分享一个特别实用的开发经验——如何用InsCode(快马)平台快速把Notepad里的笔记构思变成可交互的网页应用。作为一个经常用Notepad写代码片段和笔记的人&#xff0c;我一直在寻找能快速验证想法的工具&#xff0c;直到发现了这个平台。 为什么选择网页应用原型 N…...

5G时代下,MEC如何让无人驾驶不再‘卡顿’?——边缘计算实战解析

5G时代下&#xff0c;MEC如何让无人驾驶不再‘卡顿’&#xff1f;——边缘计算实战解析 当一辆无人驾驶汽车以60公里时速行驶时&#xff0c;每100毫秒的延迟就会导致1.67米的制动距离差异。这正是边缘计算技术&#xff08;MEC&#xff09;在智能交通领域大显身手的核心场景——…...