JavaSE -- 泛型详细介绍

泛型

简介
  1. 集合存储数据底层是利用 Object 来接收的,意思是说如果不对类型加以限制,所有数据类型柔和在一起,这时如何保证数据的安全性呢(如果不限制存入的数据类型,任何数据都能存入,当我们取出数据进行强转时无法保证成功,比如字母字符串是无法转为数字的)。所以从 JDK5 以后,引入了一个新特性 — 泛型,提供编译时类型安全检测机制,可以对存入的内容类型加以限制

  2. 泛型允许在定义类,接口时通过一个标识类表示其中某个属性的类型或者某个方法的返回值及参数类型。本质是参数化类型(将类型作为参数由用户传递)

  3. 这种参数类型可以用在类,接口和方法当中,分别称为泛型类,泛型接口和泛型方法

代码演示

自定义了一个简单的集合类,用于简单演示泛型的作用

//自定义集合类
public class MyArrayList<E> {int size = 0;Object[] arr = new Object[10];//限制插入集合的类型public void add(E item) {arr[size] = item;size ++;}//返回值类型确定public E get(int idx) {return (E) arr[idx];}
}//演示
public static void main(String[] args) {MyArrayList<Integer> arrayList = new MyArrayList<>();arrayList.add(100);Integer integer = arrayList.get(0);System.out.println(integer);
}
使用泛型

规范泛型使用字母表示的信息

  • T:Type (Java类),当类中属性要使用时可以用该字母表示
  • E:Element,在集合中使用,表示集合中元素的类型
  • K:Key(键),在表示键值对的时候使用
  • V:Value(值),在表示键值对的时候使用
  • N:Number(数值类型)
  • ?:表示不确定的 Java 类型
泛型类

格式public class 类名<泛型>

注意事项:泛型类型必须是引用数据类型。基本数据类型不可以,定义泛型类,在类后面添加尖角号,尖角号内部填类型参数,可以有多个参数,参数之间使用逗号分隔

代码:

//泛型类
public class User<T> {private T value;public User() {}public User(T value) {this.value = value;}public T getValue() {return value;}public void setValue(T value) {this.value = value;}
}//测试
public static void main(String[] args) {User<Integer> user = new User<>();user.setValue(250);Integer value = user.getValue();
}
泛型接口

格式public interface 类名<泛型>

代码:

//泛型接口	
public interface Play<T>{void show(T name);
}
class Impl1<T> implements Play<T> {@Overridepublic void show(T name) {System.out.println(name);}
}//测试
public class Main {public static void main(String[] args) {Impl1<String> impl1 = new Impl1<>();impl1.show("梨花");}
}
泛型方法

在调用方法时才去指名方法的参数和返回值的类型

代码:

public class Method {//无返回值public static <T> void method1(T value) {System.out.println(value);}有返回值public static <T> T method2(T value) {return value;}
}
泛型通配符

用于解决泛型之间的引用传递的特殊语法,主要分为三种情况

  • <?> :无边界的通配符,主要作用是让泛型能够接受未知类型的数据。在没有赋值之前,表示可以接受任何数据类型,赋值后,不能往里面添加元素。
  • <? extends E>:固定上边界的通配符,了解这个之前看看几个概念
    • 协变:在使用父类类型的场景的地方可以改用子类类型(父类应用指向子类对象
    • 逆变:在使用子类类型的场景的地方可以改用父类类型(子类引用指向父类对象
    • 不变:不能做到以上两点

    数组是可以支持协变(父类引用指向子类)。泛型是不支持协变的。这种设计大大降低了程序的灵活性,为了解决这个问题,设计出固定上边界的通配符。能够接受指定类及其子类类型的数据。虽然使用的是 extends 关键字,但是不限于继承关系,接口引用关系也可以.

    public class Method {public static void main(String[] args) {MyArrayList<b> arrayList = new MyArrayList<>();Test(arrayList);}public static void Test(MyArrayList<? extends a> arrayList) {}
    }
    class a {}
    class b extends a {}
    class c extends a {}
    
  • <? suoer E>:固定下边界的通配符,接受指定类及其父类类型(或接口)的数据。

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

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

相关文章

使用 Python 实现 ETL 流程:从文本文件提取到数据处理的全面指南

文章大纲&#xff1a; 引言&#xff1a;什么是 ETL 以及其重要性 ETL&#xff08;提取-转换-加载&#xff09;是数据处理领域中的核心概念&#xff0c;代表了从源数据到目标系统的三个关键步骤&#xff1a;**提取&#xff08;Extract&#xff09;**数据、**转换&#xff08;Tra…

selenium基础知识 和 模拟登录selenium版本

前言 selenium框架是Python用于控制浏览器的技术,在Python爬虫获取页面源代码的时候,是最重要的技术之一,通过控制浏览器,更加灵活便捷的获取浏览器中网页的源代码。 还没有安装启动selenium的同志请先看我的上一篇文章进行配置启动 和 XPath基础 对selenium进行浏览器和驱动…

JS 网页全自动翻译v3.17发布,全面接入 GiteeAI 大模型翻译及自动部署

两行 js 实现 html 全自动翻译。 无需改动页面、无语言配置文件、无 API Key、对 SEO 友好&#xff01; 升级说明 translate.service 深度绑定 GiteeAI 作为公有云翻译大模型算力支持translate.service 增加shell一键部署后通过访问自助完成GiteeAI的开通及整个接入流程。增加…

数据结构:数组:插入操作(Insert)与删除操作(Delete)

目录 插入操作&#xff08;Inserting in an Array&#xff09; 在纸上模拟你会怎么做&#xff1f; 代码实现 复杂度分析 删除操作&#xff08;Deleting from an Array&#xff09; 在纸上模拟一下怎么做&#xff1f; 代码实现 复杂度分析 插入操作&#xff08;Inserti…

Qt之修改纯色图片的颜色

这里以修改QMenu图标颜色为例,效果如下: MyMenu.h #ifndef MYMENU_H #define MYMENU_H#include <QMenu>class MyMenu : public QMenu { public:explicit MyMenu(QWidget *parent = nullptr);protected:void mouseMoveEvent(QMouseEvent *event) override; };#endif /…

uni-app实现单选,多选也能搜索,勾选,选择,回显

前往插件市场安装插件下拉搜索选择框 - DCloud 插件市场&#xff0c;该插件示例代码有vue2和vue3代码 是支持微信小程序和app的 示例代码&#xff1a; <template><view><!-- 基础用法 --><cuihai-select-search:options"options"v-model&quo…

【机器学习深度学习】 微调的十种形式全解析

目录 一、为什么要微调&#xff1f; 二、微调的 10 种主流方式 ✅ 1. 全参数微调&#xff08;Full Fine-tuning&#xff09; ✅ 2. 冻结部分层微调&#xff08;Partial Fine-tuning&#xff09; ✅ 3. 参数高效微调&#xff08;PEFT&#xff09; &#x1f538; 3.1 LoRA&…

信刻光盘安全隔离与文件单向导入/导出系统

北京英特信网络科技有限公司成立于2005年&#xff0c;是专业的数据光盘摆渡、刻录分发及光盘存储备份领域的科技企业&#xff0c;专注为军队、军工、司法、保密等行业提供数据光盘安全摆渡、跨网交换、档案归档检测等专业解决方案。 公司立足信创产业&#xff0c;产品国产安全可…

Python-标准库-os

1 需求 2 接口 3 示例 4 参考资料 在 Python 中&#xff0c;os&#xff08;Operating System&#xff09;模块是一个非常重要的内置标准库&#xff0c;提供了许多与操作系统进行交互的函数和方法&#xff0c;允许开发者在 Python 程序中执行常见的操作系统任务&#xff0c;像文…

OpenCV CUDA模块设备层-----在 GPU 上执行类似于 std::copy 的操作函数warpCopy()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 OpenCV 的 CUDA 模块&#xff08;cudev&#xff09; 中的一个设备端内联模板函数&#xff0c;用于在 GPU 上执行类似于 std::copy 的操作&#xff…

Vue Router 中$route.path与 params 的关系

1. params 参数的本质&#xff1a;路径的动态片段在 Vue Router 中&#xff0c;params 参数是通过路由配置的动态路径片段定义的&#xff0c;例如&#xff1a;// 路由配置{ path: /user/:id, component: User }当访问/user/123时&#xff0c;/user/123是完整的路径&#xff0c;…

React 极简响应式滑块验证组件实现,随机滑块位置

&#x1f3af; 滑块验证组件 (Slider Captcha) 一个现代化、响应式的滑块验证组件&#xff0c;专为 React 应用设计&#xff0c;提供流畅的用户体验和强大的安全验证功能。 ✨ 功能特性 &#x1f3ae; 核心功能 智能滑块拖拽 – 支持鼠标和触摸屏操作&#xff0c;响应灵敏随…

STM32第十六天蓝牙模块

一&#xff1a;蓝牙模块HC-05 1&#xff1a;硬件引脚配置&#xff1a; | 标号 | PIN | 说明 | |------|-------|---------------------------------------| | 1 | START | 状态引出引脚&#xff08;未连接/连接输出信号时&#xff09; |…

时序数据库IoTDB用户自定义函数(UDF)使用指南

1. 编写UDF时序数据库IoTDB为用户提供了编写UDF的JAVA API&#xff0c;用户可以自主实现UDTF&#xff08;用户自定义转换函数&#xff09;类&#xff0c;IoTDB将通过类加载机制装载用户编写的类。Maven依赖如果使用Maven&#xff0c;可以从Maven库中搜索以下依赖&#xff0c;并…

Linux国产与国外进度对垒

Linux国产与国外进度对垒 引言国产Linux的发展现状国外Linux的发展现状技术对比国产Linux的挑战与机遇国外Linux的优势与局限结论 引言 简述Linux在全球操作系统市场中的地位国产Linux的发展背景与意义国外主流Linux发行版的现状 国产Linux的发展现状 主要国产Linux发行版介…

Jenkins-Email Extension 插件插件

Editable Email Notification Editable Email Notification 是 Jenkins 的 Email Extension 插件的核心功能&#xff0c;用于自定义邮件通知&#xff0c;包括邮件主题、内容、收件人、发件人等 属性 1.Project From 项目发件人&#xff0c;设置邮件的发件人地址 **注意&…

windows系统下将Docker Desktop安装到除了C盘的其它盘中

windows系统下安装docker会自动安装到C盘&#xff0c;可以采用下面的方法将其安装到其它盘中1、先下载Docker Desktop安装程序Docker Desktop Installer.exe&#xff0c;比如你下载到了C:\Users\YourUsername\Downloads 文件夹中。 2、打开 PowerShell 进入C:\Users\YourUser…

视频工具箱 1.1.1 |小而美的视频处理工具,支持多种常用功能

VideoTools是一款基于FFmpeg的小而美的视频处理工具&#xff0c;专为需要快速高效地进行视频编辑的用户设计。这款工具无需安装&#xff0c;体积仅约200KB&#xff0c;提供了视频压缩、格式转换、转GIF、修改分辨率、加速播放以及音频提取等多种常用功能。其用户界面简洁直观&a…

无人机集群搜索技术全面解析

无人机集群搜索是指通过多架无人机协同工作&#xff0c;实现对目标区域的高效覆盖与快速探测。这项技术通过模拟自然界生物群体的集体行为&#xff0c;利用分布式控制和自主决策算法&#xff0c;使无人机集群能够自组织地完成复杂搜索任务。下面从核心技术、应用场景、算法实现…

【Elasticsearch】深度分页及其替代方案

深度分页及其替代方案 1.深度分页2.为什么不推荐深度分页2.1 性能问题&#xff08;核心原因&#xff09;2.2 资源消耗对比2.3 实际限制 3.深度分页的替代方案3.1 方案一&#xff1a;Search After&#xff08;推荐&#xff09;3.1.1 为什么 Search After 性能更高3.1.2 技术原理…