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

一,枚举类型

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

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

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

相关文章

LVS集群-DR模式【部署高可用LVS-DR集群】

文章目录 2.2 实战&#xff1a;配置LVS-DR集群2.2.1 配置IP&#xff08;Director Server的部署配置&#xff09;2.2.2 生成ens33:1配置文件 &#xff08;Director Server的部署配置&#xff09;2.2.3 配置LVS-DR规则&#xff08;Director Server的部署配置&#xff09;2.2.4 两…

Docker 镜像读写层核心概念:rootfs、Union mount、image以及layser原理详解

Docker 镜像读写层核心概念&#xff1a;rootfs、Union mount、image以及layser原理详解 文章目录 Docker 镜像读写层核心概念&#xff1a;rootfs、Union mount、image以及layser原理详解rootfsUnion mount为什么镜像层都是只读的去掉读写层的话会有什么问题 Docker镜像imageDoc…

AcWing 1.2.1 最长上升子序列模型 + 动态规划 + 图解(详细)

&#xff08;1&#xff09;acwing 4557. 最长上升子序列 4557. 最长上升子序列 - AcWing题库 给定一个长度为 N 的整数序列 a1,a2,…,aN。请你计算该序列的最长上升子序列的长度。上升子序列是指数值严格单调递增的子序列 输入格式 第一行包含整数 N第二行包含 N个整数 a1,a…

大语言模型(LLM)综述(四):如何适应预训练后的大语言模型

A Survey of Large Language Models 前言5. ADAPTATION OF LLMS5.1 指导调优5.1.1 格式化实例构建5.1.2 指导调优策略5.1.3 指导调优的效果5.1.4 指导调优的实证分析 5.2 对齐调优5.2.1 Alignment的背景和标准5.2.2 收集人类反馈5.2.3 根据人类反馈进行强化学习5.2.4 无需 RLHF…

一个比较特别的串口工具

这是08年写的一个 并网带电池逆变器 的通讯工具&#xff0c;和普通的串口调试器相比&#xff0c;多了一个【脚本】功能。能够通过【脚本】完成通讯测试。 PC发给DSP的01命令 01 10 1B 00 CF A3 00 00 90 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 电…

使用 @antfu/eslint-config 配置 eslint (包含兼容uniapp方法)

安装 pnpm i -D eslint antfu/eslint-config创建 eslint.config.js 文件 // 如果没有在 page.json 配置 "type": "module" const antfu require(antfu/eslint-config).default module.exports antfu()// 配置了 "type": "module" …

小程序开发——小程序的事件

1.事件对象 事件与事件对象概述 事件是一种用户行为&#xff0c;用户的点击、滑动等操作都可以成为事件。事件也是一种通信方式&#xff0c;能够完成视图层&#xff08;WXML页面文件&#xff09;与逻辑层&#xff08;JS逻辑文件&#xff09;之间的通信。 事件对象是指用户在点…

uniapp开发app,在ios真机上出现的css样式问题

比如下面的问题&#xff0c;在iphone 13上出现&#xff0c;在iphone xR上正常。 问题一&#xff1a;border:1rpx造成边框显示不全 在iphone13上border边框有一部分不显示&#xff1a; 在iphone xR上显示正常&#xff1a; 解决办法是&#xff1a; 将border边框设置中的1rpx改…

Burp Suite配置过滤忽略Ruby code injection和XML injection类型的安全问题

可以使用扫描配置中的"Active Scan"选项。请按照以下步骤进行配置&#xff1a; 打开Burp Suite并启动您的目标应用程序。 载入您的目标应用程序并确保它已配置为代理Burp Suite。 转到Burp Suite的"Proxy"选项卡&#xff0c;并确保Proxy Server正在运行。…

eslint识别不了别名解决方法

第一步 npm i eslint-import-resolver-alias -D第二步&#xff1a;在 eslintrc.js 配置 module.exports {settings: {import/resolver: {alias: {map: [// 这里参照webpack的别名配置映射[, ./src]],// 引用的时候可以忽略后缀extensions: [.vue, .js, .ts, .tsx, .jsx, .json…

分享一款基于 AI 的 Chrome 插件

最近使用大模型比较多&#xff0c;公司虽然提供了免费的 ChatGPT 但是需要跳转特定页面才能访问&#xff0c;比较麻烦&#xff0c;于是就想到是否可以开发一款类似于有道词典一样的 Chrome 插件&#xff0c;可以在任意页面使用&#xff0c;虽然市面上也有类似的插件&#xff0c…

【ROS入门】机器人系统仿真——URDF集成Gazebo

文章结构 URDF与Gazebo基本集成流程创建功能包编写URDF或Xacro文件启动 Gazebo 并显示机器人模型 URDF集成Gazebo相关设置collisioninertial颜色设置 URDF集成Gazebo实操编写封装惯性矩阵算法的 xacro 文件复制相关 xacro 文件&#xff0c;并设置 collision inertial 以及 colo…

Python基础入门例程18-NP18 生成数字列表(列表)

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 示例1 解答&#xff1a; 说明&#xff1a; 描述 牛牛在牛客网系统录入了一连串数字&#xff0c;数字之间依靠逗号隔开&#xff0c;你能帮助他将这些数字存储在列表中吗&#xff0c;列表元素以int的形式。 输入描述…

一文搞懂 MineCraft 服务器启动操作和常见问题 2023年10月

文章目录 前言1. 新建文件夹2. 创建 bat 文件3. 编辑 bat 文件4. 启动服务器5. 恭喜完成 文章持续更新中&#xff0c;如果你有问题可以通过 qq 1317699264 获取免费协助&#xff0c;解决的问题将会被更新到本文章中 前言 无论你是使用服务端整合包&#xff0c;还是从上一篇我的…

Kafka-Java二:Spring配置kafka消息发送端的缓冲区

一、涉及到的组件概念 1.1、缓冲区 1.2、本地线程 1.3.本地线程消息推送策略 二、各组件的解释参见代码注释 // 配置消息的缓冲区/** 设置消息发送者端的缓冲区大小&#xff0c;如果设置了缓冲区&#xff0c;消息会先发送到缓冲区&#xff0c;可以提供发送性能* 默认大小是32…

css为盒子设置滚动条隐藏滚动条

省流&#xff1a;为盒子设置宽高&#xff0c;设置滚动条方向&#xff0c;隐藏滚动条。 首先&#xff0c;要为需要添加滚动条的盒子设置固定的高度和宽度&#xff0c;这样才能让内容超过盒子的边缘。 .box {width: 300px;height: 300px; }然后&#xff0c;给盒子加入overflow属…

【开源】基于SpringBoot的天然气工程业务管理系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四、数据库设计4.1 用户表4.2 分公司表4.3 角色表4.4 数据字典表4.5 工程项目表4.6 使用材料表4.7 使用材料领用表4.8 整体E-R图 五、系统展示六、核心代码6.1 查询工程项目6.2 工程物资…

区块链的概念和特征

1.区块链的概念 区块链是一种去中心化的分布式账本技术&#xff0c;它使用密码学方法保证了数据交换和记录的安全性和可信度。区块链通过连接多个区块来组成一个链式结构&#xff0c;并利用共识算法来确保每个节点都有相同的记录和更新。这样就可以避免中心化机构的单点故障和…

通过el-tree 懒加载树,创建国家地区四级树

全国四级行政地区树数据库sql下载路径&#xff1a;【免费】全国四级地区(省市县)数据表sql资源-CSDN文库https://download.csdn.net/download/weixin_51722520/88469807?spm1001.2014.3001.5503 我在后台获取地区信息添加了限制&#xff0c;只获取parentid为当前的地…

LeetCode题:70爬楼梯,126斐波那契数

目录 70&#xff1a;爬楼梯 题目要求&#xff1a; 解题思路&#xff1a;&#xff08;类似斐波那契数&#xff09; 递归解法&#xff1a; 非递归解法&#xff1a; 126&#xff1a;斐波那契数 题目要求&#xff1a; 解题思路&#xff1a; 递归解法&#xff1a; 非递归解…