第十三章---枚举类型与泛型
一,枚举类型
1.使用枚举类型设置常量
设置常量时,我们通常将常量放置在接口中,这样在程序中就可以直接使用。该常量稚因为在接口中定义常量时,该常量的修饰符为 final 与 static。
public interface Constants (
public static final int Constants A = 1;
public static final int Constanta_B =12;
}
枚举类型出现后,逐渐取代了上述最定义方式。使用枚举类型定义常量的通法加下;
public enum Constants{
Constants_A,
Constants_B,}
例13.1]分别创建四季的接常量和枚举,比较两者的使用场
2,深入了解枚举类型
1.values()方法
枚举类型实例包含一个values()方法,该方法将枚举中所有的枚举值以数组的形式返回。
[例13.2]打印四季枚举中的所有枚举值
2.valueOf()方法与compareTo()方法
枚举类型中静态方法 valueOf0可以将普通字符串转换为枚举类型,而compareTo0方法用于比较两个枚举类型对象定义时的顺序
[例13.3]使用字符串创建一个季节的枚举值,并判断季节的位置
3.ordinal()方法
校举英型中的ordinal0方法用于获取某个枚举对象的位置索引值。
[例13.4]输出每一个季节的索引位置
4,枚举类型中的构造方法
在枚举类型中,可以添加构造方法,但是规定这个构造方法必须被 private 修饰符所修型定义的构造方法语法如下:
(例13.5]为四季枚举创建构造方法,记录每一个季节的特征
3,使用枚举类型的优势
枚举类型声明提供了一种对用户友好的变量定义方法,枚举了某种数据类型所有可能出现的值总结枚举类型,它具有以下特点:
1.类型安全
2.紧凑有效的数据定义
3.可以和程序其他部分完美交互
4.运行效率高。
二,泛型
1,回顾向上向下转型
例子
2,定义泛型类
1.object类为最上层的父类,很多程序员为了使程序更为通用,设计程序时通常使传入的值与返回objct类型为主。当需要使用这些实例时,必须正确地将该实例转换为原来的类型,否则在时将会发生 ClassCastException 异常。
2.Java提供了泛型机制。其语法如下
类名<T>
[例13.6]创建带泛型的图书类
public class Book<T> {//定义带泛型的book<t>类private T bookInfo;//参考类型:书籍信息public Book(T bookInfo) {//参数为类型形参的构造方法this.bookInfo= bookInfo;//为书籍信息赋值}public T getbookInfo() {return bookInfo;//获取书籍信息的值}public static void main(String[] args) {// TODO Auto-generated method stubBook<String> bookName = new Book<String>("java从入门到精通");//创建参数为String类型的书名对象Book<String> bookAuther = new Book<String>("明日科技");//创建参数为String类型的作者对象Book<Double> bookPrice = new Book<Double>(69.8);//创建参数为Double类型的价格对象Book<Boolean> HasSourse = new Book<Boolean>(true);//创建参数为Boolean类型的附赠源代码//控制台输出书名,作者,价格和是否附赠光盘System.out.println("书名:"+bookName.getbookInfo());System.out.println("作者:"+bookAuther.getbookInfo());System.out.println("价格:"+bookPrice.getbookInfo());System.out.println("是否附赠源代码:"+HasSourse.getbookInfo());}}
3,泛型的常规用法
1.定义泛型类时声明多个类型
在定义泛型类时,可以声明多个类型。语法如下:
class MyClass<T1,T2>{}
这样,在实例化指定类型的对象时就可以指定多个类型。例如:
MyClass <Boolean,Float> m = new MyClass <Boolean,Float>();
2.定义泛型类时声明数组类型
[例13.7]定义泛型数组
public class ArrayClass<T> {private T[]array;//定义泛型数组public T[]getArray(){return array;}public void setArray(T[]array) {this.array=array;}public static void main(String[] args) {// TODO 自动生成的方法存根ArrayClass<String>demo=new ArrayClass<String>();String value[]= {"成员1","成员2","成员3","成员4","成员5"};demo.setArray(value);String array[]=demo.getArray();for(int i =0;i<array.length;i++) {System.out.println(array[i]);}
}
}
.集合类声明容器的元素
表13.2常用的被泛型化的集合类
[例13.8]使用泛型约束集合的元素类型
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;public class AnyClass {public static void main(String[] args) {// TODO Auto-generated method stub//定义ArrayList容器,设置容器内的值IntegerArrayList<Integer> a = new ArrayList<Integer>();a.add(1);//为容器添加新值for(int i=0;i<a.size();i++) {//根据容器的长度,循环显示容器内的值System.out.println("获得ArrayList容器的成员值:"+a.get(i));}//定义HashMap容器,设置容器内的值Integer和StringMap<Integer,String> m= new HashMap<Integer,String>();for(int i=0;i<5;i++) {//为容器添加m.put(i, "成员"+i);}for(int i=0;i<m.size();i++) {//根据键名获取键值System.out.println("获得Map容器的成员值:"+m.get(i));}}}
4,泛型的高级用法
1.限制泛型可用类型
默认可以使用任何类型来实例化一个泛型类对象,但Java 中也对泛型类实例的类型作了限制。语法如下:
class 类名称<Textends anyClass>
使用泛型限制后,泛型类的类型必须实现或继承 anyClass 这个接口或类。无论 anyClass 是接口是类,在进行泛型限制时必须使用extends关键字。
[例13.9]限制泛型的类型必须为list的子类(代码最后一行是错误的)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;public class LimitClass<T extends List> {public static void main(String[] args) {//可以实例化已经实现 List 接口的类LimitClass<ArrayList> l1= new LimitClass<ArrayList>();LimitClass<LinkedList> l2 = new LimitClass<LinkedList>();//这句是错误的,因为 HashMap 类没有实现List()接口LimitClass<HashMap> l3 = new LimitClass<HashMap>();}}
2使用类型通配符
泛型机制中,提供了类型通配符,其主要作用是在创建一个泛型类对象时限制这个泛型类的类或承某个接口或类的子类。要声明这样一个对象可以使用“?”通配符来表示,同时使用 extends穿来对泛型加以限制。使用泛型类型通配符的语法如下:
泛型类名称<?extends List> a=null:
<extendsList>表示类型未知,当需要使用该泛型对象时,可以单独实例化。例如:
A<?extends List> a = null;
B=new A<ArrayList>();
B=new A<LinkedList>();
可以实例化一个限制泛型类型的实例,还可以将该实例放置在方法的参数中。例如:
Public void doSomethina(A<? extends List> a){}
:3,继承泛型类与实现泛型接口
定义为泛型的类和接口也可以被继承与实现。例如,让SubClass 类继承 ExtendClass 的泛型代码
如下:
class ExtendClass<T1>{}
class SubClass<T1,T2,T3> extends ExtendClass<T1>{}
定义为泛型的接口也可以被实现。例如,让SubClass 类实现 SomeInterface 接口,并继承接口的发型,代码如下:
interface Somelnterface<T1>{}
class SubClass<T1,T2,T3> implements Somelnterface<T1>(}
5,泛型总结
1.泛型的类型参数只能是类类型,不可以是简单类型,如 A<in>这种泛型定义就是错误的
2.泛型的类型个数可以是多个。
3.可以使用 extends 关键字限制泛型的类型
4.可以使用通配符限制泛型的类型。
相关文章:

第十三章---枚举类型与泛型
一,枚举类型 1.使用枚举类型设置常量 设置常量时,我们通常将常量放置在接口中,这样在程序中就可以直接使用。该常量稚因为在接口中定义常量时,该常量的修饰符为 final 与 static。 public interface Constants ( public static …...

shell语法大全(超级详细!!!!),非常适合入门
本文旨在对y总的Linux基础课shell语法做学习记录,指令较多,方便日后查找。 参考视频:Linux基础课 参考教程:Linux教程 1 概论 Linux中常见的shell脚本有很多种,常见的有: Bourne Shell(/usr/bin/sh或/bi…...
【Python机器学习】零基础掌握ExtraTreesRegressor集成学习
面临的问题:如何更准确地预测糖尿病患者的病情? 在医疗领域,准确预测疾病的发展状况是至关重要的。尤其是对于糖尿病这样的慢性病,一个精准的预测模型能帮助医生制定更有效的治疗方案。但问题是,如何构建一个高准确度的预测模型呢? 假设现有一组糖尿病患者的医疗数据,…...

网络协议--TCP的交互数据流
19.1 引言 前一章我们介绍了TCP连接的建立与释放,现在来介绍使用TCP进行数据传输的有关问题。 一些有关TCP通信量的研究如[Caceres et al. 1991]发现,如果按照分组数量计算,约有一半的TCP报文段包含成块数据(如FTP、电子邮件和U…...

IOC课程整理-13 Spring校验
1. Spring 校验使用场景 2. Validator 接口设计 3. Errors 接口设计 4. Errors 文案来源 5. 自定义 Validator 6. Validator 的救赎 7. 面试题精选 Spring 校验接口是哪个 org.springframework.validation.Validator Spring 有哪些校验核心组件?...

SSM咖啡点餐管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目
一、源码特点 SSM 咖啡点餐管理系统是一套完善的信息系统,结合SSM框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主 要采用B/S模式开…...

Capacitor 打包 h5 到 Android 应用,uniapp https http net::ERR_CLEARTEXT_NOT_PERMITTED
Capacitor 打包 h5 到 Android 应用,uniapp https http net::ERR_CLEARTEXT_NOT_PERMITTED capacitor 官网: https://capacitorjs.com/docs/ 项目上需要做一个 app,而这个 app 是用 uniapp 做的,里面用到了一个依赖 dom 的库&…...

华为数通方向HCIP-DataCom H12-831题库(多选题:101-120)
第101题 LSR对收到的标签进行保留,且保留方式有多种,那么以下关于LDP标签保留一自由方式的说法 A、保留邻居发送来的所有标签 B、需要更多的内存和标签空间 C、只保留来自下一跳邻居的标签,丢弃所有非下一跳铃邻居发来的标签 D、节省内存和标签空间 E、当IP路由收敛、下一跳…...

misc学习(4)Traffic(流量分析)-
感悟:回想起自己学的计算机网络和网络协议分析,有所感悟:计算机网络好比将一群人区分开来(局域网),为了能够使得不同部分的人能够沟通(wireshark中的数据包),就设置了网络…...
Less的基本语法
less的每一个语句后必须使用";"结束,否则可能无法正确的转换成css 1、导入 即在当前less文件中引用其它less文件,被引入的less文件中的内容可以在此less文件中使用。在引用less文件时可以省略扩展名 import "global"; // global.…...
spring boot项目优雅停机
1、关闭流程 停止接收请求和内部线程。判断是否有线程正在执行。等待正在执行的线程执行完毕。停止容器。 2、关闭过程有新的请求 在kill Spring Boot项目时,如果有访问请求过来,请求会被拒绝并返回错误提示。 在kill Spring Boot项目时,Sp…...

链式存储方式下字符串的replace(S,T1,T2)运算
链式存储方式下字符串的replace运算 ⭐️题目⭐️思路⭐️代码✨定义结点✨打印字符串函数✨计算字符串函数✨初始化字符串函数✨代码解读✨字符串替换函数✨字符串替换函数解读✨ 主函数✨完整代码 实现在链式存储下字符串的replace(S,T1,T2),来自课本习题的一道题…...

unity脚本_Mathf和Math c#
首先创建一个脚本 当我们要做一个值趋近于一个值变化时 可以用Mathf.Lerp(start,end,time);方法实现 比如物体跟随...

轻量级仿 Spring Boot=嵌入式 Tomcat+Spring MVC
啥?Spring Boot 不用?——对。就只是使用 Spring MVC Embedded Tomcat,而不用 Boot。为啥?——因为 Boot 太重了:) 那是反智吗?Spring Boot 好好的就只是因为太重就不用?——稍安勿…...

笔记Kubernetes核心技术-之Controller
2、Controller 2.1、概述 在集群上管理和运行容器的对象,控制器(也称为:工作负载),Controller实际存在的,Pod是抽象的; 2.2、Pod和Controller关系 Pod是通过Controller实现应用运维,比如:弹…...

Azure云工作站上做Machine Learning模型开发 - 全流程演示
目录 本文内容先决条件从“笔记本”开始设置用于原型制作的新环境(可选)创建笔记本开发训练脚本迭代检查结果 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕࿰…...

前端 : 用html ,css,js写一个你画我猜的游戏
1.HTML: <body><div id "content"><div id "box1">计时器</div><div id"box"><div id "top"><div id "box-top-left">第几题:</div><div id "box…...

Illustrator 2024(AI v28.0)
Illustrator 2024是一款功能强大的矢量图形编辑软件,由Adobe公司开发。它是设计师、艺术家和创意专业人士的首选工具,用于创建和编辑各种矢量图形、插图、图标、标志和艺术作品。 以下是Adobe Illustrator的主要功能和特点: 矢量图形编辑&…...

【Git企业开发】第二节.Git 的分支管理
作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:Git企业级开发 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!࿰…...
第三章认识Node.js模块化开发
目录 认识Node.js 概述 作用 基本使用 Node.js的运行 Node.js的组成 Node.js的语法 Node.js全局对象 认识模块化开发 概述 场景 特点 模块成员的导入和导出 Node.js 模块化语法 导入模块 导出模块 ES6 模块化语法 导入模块 导出模块 项目 认识Node.js 概述…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

STM32标准库-ADC数模转换器
文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”:输入模块(GPIO、温度、V_REFINT)1.4.2 信号 “调度站”:多路开关1.4.3 信号 “加工厂”:ADC 转换器(规则组 注入…...