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

第十三章---枚举类型与泛型

一,枚举类型

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.可以使用通配符限制泛型的类型。

相关文章:

第十三章---枚举类型与泛型

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

shell语法大全(超级详细!!!!),非常适合入门

本文旨在对y总的Linux基础课shell语法做学习记录&#xff0c;指令较多&#xff0c;方便日后查找。 参考视频&#xff1a;Linux基础课 参考教程&#xff1a;Linux教程 1 概论 Linux中常见的shell脚本有很多种&#xff0c;常见的有&#xff1a; Bourne Shell(/usr/bin/sh或/bi…...

【Python机器学习】零基础掌握ExtraTreesRegressor集成学习

面临的问题:如何更准确地预测糖尿病患者的病情? 在医疗领域,准确预测疾病的发展状况是至关重要的。尤其是对于糖尿病这样的慢性病,一个精准的预测模型能帮助医生制定更有效的治疗方案。但问题是,如何构建一个高准确度的预测模型呢? 假设现有一组糖尿病患者的医疗数据,…...

网络协议--TCP的交互数据流

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

IOC课程整理-13 Spring校验

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

SSM咖啡点餐管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 咖啡点餐管理系统是一套完善的信息系统&#xff0c;结合SSM框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主 要采用B/S模式开…...

Capacitor 打包 h5 到 Android 应用,uniapp https http net::ERR_CLEARTEXT_NOT_PERMITTED

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

华为数通方向HCIP-DataCom H12-831题库(多选题:101-120)

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

misc学习(4)Traffic(流量分析)-

感悟&#xff1a;回想起自己学的计算机网络和网络协议分析&#xff0c;有所感悟&#xff1a;计算机网络好比将一群人区分开来&#xff08;局域网&#xff09;&#xff0c;为了能够使得不同部分的人能够沟通&#xff08;wireshark中的数据包&#xff09;&#xff0c;就设置了网络…...

Less的基本语法

less的每一个语句后必须使用";"结束&#xff0c;否则可能无法正确的转换成css 1、导入 即在当前less文件中引用其它less文件&#xff0c;被引入的less文件中的内容可以在此less文件中使用。在引用less文件时可以省略扩展名 import "global"; // global.…...

spring boot项目优雅停机

1、关闭流程 停止接收请求和内部线程。判断是否有线程正在执行。等待正在执行的线程执行完毕。停止容器。 2、关闭过程有新的请求 在kill Spring Boot项目时&#xff0c;如果有访问请求过来&#xff0c;请求会被拒绝并返回错误提示。 在kill Spring Boot项目时&#xff0c;Sp…...

链式存储方式下字符串的replace(S,T1,T2)运算

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

unity脚本_Mathf和Math c#

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

轻量级仿 Spring Boot=嵌入式 Tomcat+Spring MVC

啥&#xff1f;Spring Boot 不用&#xff1f;——对。就只是使用 Spring MVC Embedded Tomcat&#xff0c;而不用 Boot。为啥&#xff1f;——因为 Boot 太重了&#xff1a;&#xff09; 那是反智吗&#xff1f;Spring Boot 好好的就只是因为太重就不用&#xff1f;——稍安勿…...

笔记Kubernetes核心技术-之Controller

2、Controller 2.1、概述 在集群上管理和运行容器的对象&#xff0c;控制器(也称为&#xff1a;工作负载)&#xff0c;Controller实际存在的&#xff0c;Pod是抽象的&#xff1b; 2.2、Pod和Controller关系 Pod是通过Controller实现应用运维&#xff0c;比如&#xff1a;弹…...

Azure云工作站上做Machine Learning模型开发 - 全流程演示

目录 本文内容先决条件从“笔记本”开始设置用于原型制作的新环境&#xff08;可选&#xff09;创建笔记本开发训练脚本迭代检查结果 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0…...

前端 : 用html ,css,js写一个你画我猜的游戏

1.HTML&#xff1a; <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是一款功能强大的矢量图形编辑软件&#xff0c;由Adobe公司开发。它是设计师、艺术家和创意专业人士的首选工具&#xff0c;用于创建和编辑各种矢量图形、插图、图标、标志和艺术作品。 以下是Adobe Illustrator的主要功能和特点&#xff1a; 矢量图形编辑&…...

【Git企业开发】第二节.Git 的分支管理

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;Git企业级开发 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&#xff0…...

第三章认识Node.js模块化开发

目录 认识Node.js 概述 作用 基本使用 Node.js的运行 Node.js的组成 Node.js的语法 Node.js全局对象 认识模块化开发 概述 场景 特点 模块成员的导入和导出 Node.js 模块化语法 导入模块 导出模块 ES6 模块化语法 导入模块 导出模块 项目 认识Node.js 概述…...

macOS安装OpenClaw全流程:Qwen2.5-VL-7B图文模型调试技巧

macOS安装OpenClaw全流程&#xff1a;Qwen2.5-VL-7B图文模型调试技巧 1. 为什么选择OpenClawQwen2.5-VL组合 去年冬天第一次接触OpenClaw时&#xff0c;我正被重复性的截图标注工作折磨得焦头烂额。当时尝试过几个自动化工具&#xff0c;要么功能太局限&#xff0c;要么需要把…...

StructBERT语义分析工具实测:一键判断句子相似度,支持GPU加速

StructBERT语义分析工具实测&#xff1a;一键判断句子相似度&#xff0c;支持GPU加速 1. 工具核心价值 StructBERT语义分析工具是一款专为中文文本设计的本地化语义相似度计算解决方案。不同于传统的关键词匹配方法&#xff0c;该工具基于阿里巴巴开源的StructBERT-Large模型…...

从洛伦兹吸引子到三体问题:用Python RK45方法探索混沌与天体物理的奇妙世界

从洛伦兹吸引子到三体问题&#xff1a;用Python RK45方法探索混沌与天体物理的奇妙世界 混沌系统与天体运动看似毫不相关&#xff0c;却共享着对初始条件极度敏感的数学本质。1963年&#xff0c;气象学家爱德华洛伦兹在简化大气对流模型时&#xff0c;意外发现了"蝴蝶效应…...

STM32压力传感器统一驱动:BMP280/MS5803/ADS1115/SDP3x

目录 一、4 款传感器 典型应用场景 二、统一软件工程接口&#xff08;标准 C 语言&#xff0c;可直接用&#xff09; 1. 通用结构体&#xff08;所有传感器统一格式&#xff09; 三、4 款传感器 完整驱动 校准接口 1. BMP280 气压 / 温度 应用&#xff1a;环境气压、高度…...

实战指南:利用快马ai为django项目生成开箱即用的vscode python开发环境

作为一个长期使用Python开发Django项目的程序员&#xff0c;我深知配置开发环境是个既基础又容易踩坑的环节。最近尝试用InsCode(快马)平台生成配置方案&#xff0c;发现能省去大量重复劳动。下面分享我的实战经验&#xff1a; 项目结构规范化 平台生成的Django项目骨架严格遵循…...

Kubernetes中的ConfigMap与Secret:安全高效管理配置的终极指南

引言&#xff1a;云原生时代的配置困境 在传统的运维模式中&#xff0c;配置往往硬编码在镜像中&#xff0c;或通过环境变量散落在各处。随着微服务架构的普及&#xff0c;这种模式带来了“配置漂移”、镜像臃肿、敏感信息泄露等痛点。 Kubernetes 通过 ConfigMap 和 Secret …...

DOL-CHS-MODS整合包:从新手入门到定制开发的完整指南

DOL-CHS-MODS整合包&#xff1a;从新手入门到定制开发的完整指南 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 一、需求定位&#xff1a;你属于哪种玩家类型&#xff1f; 场景描述 不同玩家对游…...

PasteMD用户调研报告:2024年文档格式转换需求分析

PasteMD用户调研报告&#xff1a;2024年文档格式转换需求分析 1. 调研背景与核心发现 最近整理了500份来自不同行业用户的实际反馈&#xff0c;这些反馈不是问卷里的标准答案&#xff0c;而是真实工作场景中留下的痕迹——有深夜赶论文时的抱怨截图&#xff0c;有项目汇报前的…...

Ostrakon-VL零售AI降本方案:替代人工巡检,单店年省8万元

Ostrakon-VL零售AI降本方案&#xff1a;替代人工巡检&#xff0c;单店年省8万元 1. 零售巡检的痛点与AI解决方案 在传统零售运营中&#xff0c;门店巡检是一项耗时耗力的日常工作。店长或督导人员需要每天检查&#xff1a; 商品陈列是否整齐货架缺货情况价签是否正确店铺环境…...

汽车动力性能计算工具插件:一键测算电机需求与整车性能,工程师专属轻量级辅助软件

温馨提示&#xff1a;文末有联系方式插件核心功能亮点 本款汽车动力性系统专用计算小工具&#xff0c;可精准推演电机功率与扭矩需求&#xff0c;同步输出整车加速性能、最大爬坡度、最高稳定车速等关键动力参数&#xff0c;覆盖常规工况与典型驱动场景&#xff0c;满足前期方案…...