Java从入门到精通笔记篇(十二)
枚举类型与泛型

枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中
使用枚举类型设置常量
关键字为enum

枚举类型的常用方法
values()方法
枚举类型实例包含一个values()方法,该方法将枚举中所有的枚举值以数组的形式返回。

valueOf()可以将普通字符串转换为枚举类型
compareTo()方法用于比较两个枚举类型对象定义时的顺序。

枚举类型中的ordinal()方法用于获取某个枚举对象的位置索引值。

注意:
关于构造方法,在枚举类型中,无论是无参构造方法还是有参构造方法,修饰权限都为private。
泛型
泛型实质上就是使程序员定义安全的类型。
将基本类型向上转型或者是向下转型时,用错了类型,或者并没有执行该操作,就会出现异常,但由于语法不存在错误,因此可以被编译器接受,但在执行时会出现ClassCastException异常。
定义泛型
类名<T>
T是泛型的名称,代表某一种类型。如果不指定具体类型,T则采用Object类型。
在使用类中的方法传递或返回数据类型时将不再需要进行类型转换操作,而是使用在声明泛型类对象时“< >”符号中设置的数据类型。

在定义泛型类时,可以声明多个类型,在实例化指定类型的对象时就可以指定多个类型。
Class Myclass<T1,T2>{}
Myclass<Boolean,Float> m = new Myclass<Boolean,Float>()
定义泛型类时也可以声明数组类型,但注意不可以使用泛型来建立数组的实例。

使用泛型实例化常用集合类

泛型的高级用法
限制泛型可用类型
Class 类名称<T extends anyClass>
使用泛型限制后,泛型类的类型必须实现或继承anyClass这个接口或类,且必须使用extends关键字。例如下列的l1和l2是正确的,l3则不能。

当没有使用extends关键字限制泛型类型时,默认Object类下的所有子类都可以实例化泛型类对象。
使用类型通配符
作用是在创建一个泛型类对象时限制这个泛型类的类型实现或继承某个接口或类的子类。
泛型类名称<? extends List> a =null
还可以将该实例放置在方法的参数中。
Public void doSomething(A<? extends List> a){}
如果使用A<?>这种形式实例化泛型类对象,则默认表示可以将A指定为实例化Object及以下的子类类型。
“List<?> l2 = l1”语句与“List l2 = l1”语句存在何种本质区别?这里需要注意的是,对于使用通配符的对象不能向其中加入新的信息,只能从其中获取或删除信息。
泛型类型限制除了可以向下限制,还可以进行向上限制,只要在定义时使用super关键字即可。例如,像“A<? super List> a = null;”这样定义后,对象a只接受List接口或上层父类类型,如“a =new A<Object>();”。
定义为泛型的类和接口也可以被继承与实现。
如果在SubClass类继承ExtendClass类时保留父类的泛型类型,需要在继承时指明,如果没有指明,直接使用“extends ExtendsClass”进行继承操作,则SubClass类中的T1、T2和T3都会自动变为Object类型,所以在一般情况下都将父类的泛型类型进行保留。

泛型总结
泛型的类型参数只能是类类型,不可以是简单类型,如A<int>这种泛型定义就是错误的。
泛型的类型个数可以是多个。
可以使用extends关键字限制泛型的类型。
可以使用通配符限制泛型的类型
相关文章:
 
Java从入门到精通笔记篇(十二)
枚举类型与泛型 枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中 使用枚举类型设置常量 关键字为enum 枚举类型的常用方法 values()方法 枚举类型实例包含一个values()方法,该方法将枚举中所有的枚举值以数组的形式返回。 valueOf()可…...
入侵排查之Linux
目录 1.黑客入侵后的利用思路 2.入侵排查思路 2.1.账号安全 2.1.1.用户信息文件/etc/passwd 2.1.2.影子文件/etc/shadow 2.1.3.入侵排查 2.1.3.1.排查当前系统登录信息 2.1.4.2.查询可以远程登录的账号信息 2.2.历史命令 2.2.1.基本使用 2.2.1.1.root历史命令 2.2.…...
 
从0开始学习Linux——文件管理
往期目录: 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 从0开始学习Linux——Yum工具 从0开始学习Linux——远程连接工具 从0开始学习Linux——文件目录 从0开始学习Linux——网络配置 从0开…...
 
全面介绍软件安全测试分类,安全测试方法、安全防护技术、安全测试流程
一、软件系统设计开发运行安全 1、注重OpenSource组件安全检查和版本更新(black duck) 现在很多云、云服务器都是由开源的组件去搭成的,对于OpenSource组件应该去做一些安全检查和版本更新,尤其是版本管理,定期对在运…...
Leidenアルゴリズムの詳細解説:Pythonによるネットワーク分割の実装
Leidenアルゴリズムの詳細解説:Pythonによるネットワーク分割の実装 目次1. Leidenアルゴリズムの概要2. Python実装例3. グループ分けの結果分析4. なぜこのような分割になるのか5. Leidenアルゴリズムの仕組み6. 実践的な応用例7. 初心者へのアドバイス8. まとめ …...
 
安当ASP系统:适合中小企业的轻量级Radius认证服务器
安当ASP(Authentication Service Platform)身份认证系统是一款功能强大的身份认证服务平台,特别适用于中小企业。其中,简约型Radius认证服务器是安当ASP系统中的一个重要组成部分。以下是对该系统的详细介绍: 一、主要…...
Vue 组件间传值指南:Vue 组件通信的七种方法
前言 Vue 的组件系统非常强大,允许我们将应用程序拆分成独立且可复用的组件。随着前端开发的复杂性增加,组件间的数据传递和状态管理显得尤为重要。本文将详细介绍几种在 Vue 中常用的组件间传值方法,并结合实际代码示例,帮助您更…...
 
推荐一个超漂亮ui的网页应用设计
https://andi.cn/download/65211.html...
 
有什么初学算法的书籍推荐?
对于初学算法的读者,以下是一些值得推荐的书籍: 1、算法超简单:趣味游戏带你轻松入门与实践 作者:童晶 著 推荐理由:本书把趣味游戏应用于算法教学,提升读者的学习兴趣,并通过可视化的图解和动…...
自动化工作流建设指南
🚀 自动化工作流建设指南:CI/CD、Github Actions与自动化测试部署 打造现代化的自动化工作流,提升团队开发效率。今天咱们将深入探讨 CI/CD 最佳实践、Github Actions 实战经验以及自动化测试与部署策略。 📑 目录 CI/CD 最佳实践…...
 
[免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue3校园宿舍管理系统(优质版),分享下哈。 项目视频演示 【免费】SpringBootVue3校园宿舍管理系统(优质版) Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的不断发展&…...
SNK施努卡 - 机器人测温取样系统
机械手测温取样系统 有色行业自动化 机器人:机械手测温取样系统是以工业机器人为平台,技术相对成熟稳定,利用机器人的灵活性,自动往测温取样枪上安装探头,自动将探头伸进高温铜水内进行测温取样,自动拆除废…...
goframe开发一个企业网站 验证码17
Go验证码功能实现详解 目录结构 ├── internal │ ├── controller │ │ └── captcha │ │ └── captcha.go │ ├── logic │ │ └── captcha │ │ └── captcha.go │ └── service │ └── captcha.go1. Serv…...
 
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
目录 1. 单例模式 (1) 饿汉模式 (2) 懒汉模式 1. 单线程版本 2. 多线程版本 2. 解决懒汉模式产生的线程安全问题 (1) 产生线程安全的原因 (2) 解决线程安全问题 1. 通过加锁让读写操作紧密执行 方法一 方法二 2. 处理加锁引入的新问题 问题描述 …...
MySQL电商多级分类表设计方案对比
MySQL电商多级分类表设计方案对比 在电商系统中,多级分类是一个常见的需求,用于组织和管理商品类别,合理的设计可以提高系统的性能和可维护性。本文将详细介绍三种不同的多级分类表设计方案,我们将使用宠物分类作为示例数据&…...
 
网络安全工程师需要知道哪些IPSec的基本原理?
IPSec是一种端到端的安全协议,为IP数据包提供认证、完整性和加密服务。它通过在IP层实现安全功能,确保数据在传输过程中的机密性、完整性和真实性。IPSec广泛应用于VPN、远程访问和企业内部网络通信等领域,是保护互联网通信安全的重要手段。 …...
 
leetcode 148. 排序链表 中等
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3: …...
动态规划与贪心算法:核心区别与实例分析
动态规划与贪心算法:核心区别与实例分析 动态规划和贪心算法是计算机科学中用于解决优化问题的两种著名方法。它们各自的思路和应用场景有显著的区别,理解这些区别对解决相关问题至关重要。本文将详细探讨这两种算法的最优子结构、解法策略、适用场景&a…...
.NET 公共语言运行时(Common Language Runtime,CLR)
.NET 的公共语言运行时(Common Language Runtime,CLR)是 .NET Framework 和 .NET Core 的核心组件,负责运行和管理 .NET 程序。CLR 提供了一个高效、安全和稳定的执行环境,支持多种编程语言并处理各种系统级的任务。下…...
 
SpringBoot使用TraceId日志链路追踪
项目场景: 有时候一个业务调用链场景,很长,调了各种各样的方法,看日志的时候,各个接口的日志穿插,确实让人头大。为了解决这个痛点,就使用了TraceId,根据TraceId关键字进入服务器查询…...
 
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
 
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
 
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
 
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
 
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
 
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
 
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
 
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
