当前位置: 首页 > 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 概述…...

模拟几种数据融合协作频谱感知技术在认知无线电应用中性能研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

鸿蒙同城兴趣圈页面构建:附近社群与兴趣标签模块详解

鸿蒙同城兴趣圈页面构建&#xff1a;附近社群与兴趣标签模块详解 前言 在 HarmonyOS 6.0 应用开发中&#xff0c;社交类页面的核心挑战在于如何高效展示附近社群、兴趣标签和活动信息。本文将以“同城兴趣圈”应用的主页面为例&#xff0c;深入解析如何在鸿蒙平台上构建社交发现…...

MoE架构揭秘:万亿参数大模型如何实现2%活跃率

1. 项目概述&#xff1a;当“参数规模”不再等于“实际计算量”你可能已经看过不少标题党文章&#xff0c;比如“GPT-4参数量突破1.8万亿&#xff01;”——但真正值得细品的&#xff0c;是后半句&#xff1a;“它每处理一个词&#xff08;token&#xff09;&#xff0c;只动用…...

Agent记忆系统工程:让AI真正记住重要的事

无状态的 AI 助手每次对话都从零开始&#xff0c;这是当前应用体验差的核心原因之一。本文系统性地拆解 Agent 记忆系统的工程实现&#xff0c;从短期工作记忆到长期知识库&#xff0c;构建有"真实记忆"的 AI Agent。 记忆系统的四个层次人类记忆是分层的&#xff1a…...

用 5 款全栈电商微系统打通你的前后端核心逻辑链路(附级联 Prompt)

各位大前端、全栈开发以及正在寻求技术进阶的同仁们&#xff0c;大家好。在日常的技术社区里&#xff0c;我们经常能看到各种流于表面的前端 UI 静态页或者几行代码拼凑的后端 CRUD 示例。但真正能在一个全栈工程师的履历中起到定海神针作用的&#xff0c;往往是那些功能内敛、…...

5月21日-23日微相携多款产品亮相2026世界无人机大会暨UASE无人机展以先进无人机侦测反制技术产品赋能城市低空安全防护

微相亮相2026世界无人机大会暨UASE无人机展...

ChatGPT高质量输出的隐藏开关:基于IEEE写作标准的11项自动校验清单(附可运行Python验证脚本)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;ChatGPT高质量输出的底层逻辑与认知前提 ChatGPT生成高质量响应并非依赖“魔法”&#xff0c;而是建立在三个核心支柱之上&#xff1a;大规模语言建模的统计涌现能力、人类反馈强化学习&#xff08;RLHF&#…...

Go语言模板引擎与前端渲染实战

Go语言模板引擎与前端渲染实战 引言 模板引擎是Web开发中连接后端数据与前端展示的关键组件。Go语言标准库提供了强大的模板引擎&#xff0c;本文将深入探讨其使用方法和最佳实践。 一、Go模板引擎基础 1.1 text/template与html/template // text/template - 纯文本模板 import…...

SPT-AKI存档编辑器:5分钟掌握离线塔科夫角色定制终极方案

SPT-AKI存档编辑器&#xff1a;5分钟掌握离线塔科夫角色定制终极方案 【免费下载链接】SPT-AKI-Profile-Editor Программа для редактирования профиля игрока на сервере SPT-AKI 项目地址: https://gitcode.com/gh_mirror…...

ML模型生产部署:从Jupyter到高可用推理服务的工程化实践

1. 项目概述&#xff1a;当模型走出Jupyter&#xff0c;真正开始呼吸真实世界空气“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题本身就像一句暗号&#xff0c;专为那些在Jupyter里调通了模型、画出了漂亮ROC曲线、却在部署时被生产环境…...