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

第十三章总结

一.泛型

1.定义泛型类

泛型机制语法

类名<T>

其中,T是泛型的名称,代表某一种类型。

【例13.6】创建带泛型的图书类

代码:

结果:

2.泛型的常规用法

(1)定义泛型类时声明多个变量

class MyClass<T1,T2>{ }

其中,T1和T2为可能被定义的类型。

这样,在实例化指定类型的对象时就可以指定多个类型。例如:

MyClass<Boolean,Float> m=new MyClass<Boolean.float>();

(2)定义泛型时声明数组类型 
        【例13.7】定义泛型数组
代码:

结果:

可见,可以在使用泛型机制时声明一个数组,但是不可以使用泛型来创建数组的实例

(3)集合类声明容器的元素

JDK中的集合接口、集合类都被定义了泛型,其中List<E>的泛型E实际上就是element元素的首字母,Map<K,V>的泛型K和V就是key键和value值的首字母。

3.泛型的高级用法

(1)限制泛型可用类型

默认可以使用任何类型来实例化一个泛型类对象,但Java中也对泛型类实例的类型作了限制。语法:

class 类名称<T extends anyClass>

其中,anyClass指某个接口或类。 

使用泛型限制后,泛型类的类型必须实现或继承anyClass这个接口或类。无论anyClass是接口还是类,在进行泛型限制时都必须使用extends关键字。

(2)使用类型通配符

在泛型机制中,提供了类型通配符,其主要作用是在创建一个泛型类对象时限制这个泛型类的类型实现或继承某个接口或类的子类。要声明这样一个对象可以使用“?”通配符来表示,同时使用extends关键字来对泛型加以限制。语法:

泛型类名称<? extends List> a=null;

其中,<? extends List>表示类型未知,当需要使用该泛型对象时,可以单独实例化。例如:

A<? extends List> a=null;
a=new A<ArrayList>();
a=new A<LinkedList>();

如果实例化没有实现List接口的泛型对象,编译器会报错。

除了可以实例化一个限制泛型类型的实例,还可以将该实例放置在方法的参数中。例如:

public void doSomething(A<? extends List>a){}

在上述代码中,定义方法有效地限制了传入doSomething()方法的参数类型。

(3)继承泛型类与实现泛型接口

定义为泛型的类和接口也可以被继承与实现。例如,让SubClass类继承ExtendClass的泛型:

class ExtendClass<T1>{}
class SubClass<T1,T2,T3> extends ExtendClass<T1>{}

4.泛型总结

使用方法:

(1)泛型的类型参数只能是类类型,不可以是简单类型,如A<int>这种泛型定义就是错误的。

(2)泛型的类型个数可以是多个

(3)可以使用extends关键字限制泛型的类型。

(4)可以使用通配符限制泛型的类型。

二.枚举类型

        1.使用枚举类型设置常量

使用枚举类型定义常量的语法:

public enum Constants{Constants_A,Constants-B,
}

其中,enum是定义枚举类型的关键字。

当需要在程序中使用该常量时,可以使用Constants.Constants_A来表示。

【例13.1】分别创建四季的接口常量和枚举,比较两者的使用场景

代码:

2.深入了解枚举类型

【例13.5】为四季枚举创建构造方法,记录每一个季节的特征

代码:

结果:

3.使用枚举类型的优势

(1)类型安全。

(2)紧凑有效的数据定义。

(3)可以和程序其他部分完美交互。

(4)运行效率高。

相关文章:

第十三章总结

一.泛型 1.定义泛型类 泛型机制语法&#xff1a; 类名<T> 其中&#xff0c;T是泛型的名称&#xff0c;代表某一种类型。 【例13.6】创建带泛型的图书类 代码&#xff1a; 结果&#xff1a; 2.泛型的常规用法 (1)定义泛型类时声明多个变量 class MyClass<T1,T2…...

大模型应用_PrivateGPT

https://github.com/imartinez/privateGPT 1 功能 整体功能&#xff0c;想解决什么问题 搭建完整的 RAG 系统&#xff0c;与 FastGPT相比&#xff0c;界面比较简单。但是底层支持比较丰富&#xff0c;可用于知识库的完全本地部署&#xff0c;包含大模型和向量库。适用于保密级…...

[Android] ubuntu虚拟机上搭建 Waydroid 环境

1.安装虚拟机 略 2.安装waydroid Ubuntu/Debian and derivatives For Droidian and Ubuntu Touch, skip directly to the last step Install pre-requisites sudo apt install curl ca-certificates -y Add the official repository curl https://repo.waydro.id | sudo…...

LeedCode刷题---滑动窗口问题(二)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、将X减到0的最小操作数 题目链接&#xff1a;将 x 减到 0 的最小操作数 题目描述 给你一个整数数组 nums 和一个整数 x 。每一…...

pycharm依赖管理(不要用pip freeze)

在使用python虚拟环境时&#xff0c;可以使用requirements.txt来管理当前项目的依赖。 注意&#xff0c;不要用 pip freeze > requirements.txt 这个命令&#xff0c;因为它会引入很多无关的包。 可以使用 pipreqs ./ --encodingutf-8 ./ 表示当前项目的目录&#xff0…...

[Kafka 常见面试题]如何保证消息的不重复不丢失

文章目录 Kafka1. Kafka如何保证不丢失消息&#xff1f;生产者数据的不丢失消费者数据的不丢失Kafka集群中的broker的数据不丢失 2. Kafka中的消息是否会丢失和重复消费&#xff1f;1. 消息发送2. 消息消费 3. Kafka 的设计是什么样的呢&#xff1f;4. 数据传输的事务定义有哪三…...

Java中System.setProperty()用法

Java中System.setProperty()用法 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一起深入了解Java中的System.setProperty()方法&#xff0c…...

Eclipse 自动生成注解,如果是IDEA可以参考编译器自带模版进行修改

IDEA添加自动注解 左上角选择 File -> Settings -> Editor -> File and Code Templates&#xff1b; 1、添加class文件自动注解&#xff1a; ​/*** <b>Function: </b> todo* program: ${NAME}* Package: ${PACKAGE_NAME}* author: Jerry* date: ${YEA…...

微信小程序vant安装使用过程中遇到无法构建npm的问题

官网地址&#xff0c;然而如果完全按照这个教程来&#xff0c;实际上是缺少步骤的&#xff0c;需要补充一些步骤&#xff08;参考https://www.bilibili.com/video/BV1vL41127Er&#xff09; # 这步init就是补充的 npm init npm i vant/weapp -S --production# 剩下的按照vant的…...

[python]用python获取EXCEL文件内容并保存到DBC

目录 关键词平台说明背景所需库实现过程方法1.1.安装相关库2.代码实现 关键词 python、excel、DBC、openpyxl 平台说明 项目Valuepython版本3.6 背景 在搭建自动化测试平台的时候经常会提取DBC文件中的信息并保存为excel或者其他文件格式&#xff0c;用于自动化测试。本文…...

Spring Boot 如何配置 log4j2

Log4j2 介绍 Spring Boot 中默认使用 Logback 作为日志框架&#xff0c;接下来我们将学习如何在 Spring Boot 中集成与配置 Log4j2。在配置之前&#xff0c;我们需要知道的是 Log4j2 是 Log4j 的升级版&#xff0c;它在 Log4j 的基础上做了诸多改进&#xff1a; 异步日志&…...

如何安装docker

安装Docker的步骤取决于您使用的操作系统。以下是常见操作系统上安装Docker的基本步骤&#xff1a; 对于Linux: 更新软件包索引&#xff1a; sudo apt-get update安装允许apt通过HTTPS使用仓库的包&#xff1a; sudo apt-get install apt-transport-https ca-certificates cur…...

Linux 之 性能优化

uptime $ uptime -p up 1 week, 1 day, 21 hours, 27 minutes$ uptime12:04:11 up 8 days, 21:27, 1 user, load average: 0.54, 0.32, 0.23“12:04:11” 表示当前时间“up 8 days, 21:27,” 表示运行了多长时间“load average: 0.54, 0.32, 0.23”“1 user” 表示 正在登录…...

用Go汇编实现一个快速排序算法

本代码全网首发&#xff0c;使用Go plan9 windows arm64汇编&#xff0c;实现基础版快速排序算法。 未引入随机因子的快速排序的普通Go代码长这样。 func QuickSort(arr []int) {if len(arr) < 1 {return}base, l, r : arr[0], 0, len(arr)-1for i : 1; i < r; {if arr…...

Spring-整合MyBatis

依赖 <dependencies><!--提供数据源--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.9.RELEASE</version></dependency><!--提供sqlSessionFactory…...

sql宽字节注入

magic_quotes_gpc&#xff08;魔术引号开关&#xff09; https://www.cnblogs.com/timelesszhuang/p/3726736.html magic_quotes_gpc函数在php中的作用是判断解析用户提交的数据&#xff0c;如包括有&#xff1a;post、get、cookie过来的数据增加转义字符“\”&#xff0c;以…...

开源 LLM 微调训练指南:如何打造属于自己的 LLM 模型

一、介绍 今天我们来聊一聊关于LLM的微调训练&#xff0c;LLM应该算是目前当之无愧的最有影响力的AI技术。尽管它只是一个语言模型&#xff0c;但它具备理解和生成人类语言的能力&#xff0c;非常厉害&#xff01;它可以革新各个行业&#xff0c;包括自然语言处理、机器翻译、…...

Android hilt使用

一&#xff0c;添加依赖库 添加依赖库app build.gradle.kts implementation("com.google.dagger:hilt-android:2.49")annotationProcessor("com.google.dagger:hilt-android:2.49")annotationProcessor("com.google.dagger:hilt-compiler:2.49"…...

2023/12/17 初始化

普通变量&#xff08;int,float,double变量&#xff09;初始化&#xff1a; int a0; float b(0); double c0; 数组初始化&#xff1a; int arr[10]{0}; 指针初始化&#xff1a; 空指针 int *pnullptr; 被一个同类型的变量的地址初始化&#xff08;赋值&#xff09; int…...

【算法Hot100系列】三数之和

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

哔哩下载姬DownKyi:你的B站视频下载与处理终极指南

哔哩下载姬DownKyi&#xff1a;你的B站视频下载与处理终极指南 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff…...

金属表面缺陷智能检测新突破

篇名问题&#xff0c;背景方法结论金属表面缺陷自适应分割算法1.金属表面划痕 2.金属表面凹凸 3.金属表面污点 4.金属表面刮擦 5.金属表面裂纹2.1多方向灰度波动分析 2.2领域灰度差分割算法 2.3PCA法图像压缩本文算法与其他算法相比&#xff0c;具有通用性好、分割准确度高等优…...

羽毛球正反手抽球

文章目录 引言 I 正手抽球 II 反手抽球 1. 准备与步法 2. 握拍与引拍 3. 挥拍与击球 4. 随挥与回动 引言 羽毛球正手抽球和反手抽球是两项重要的中前场技术。正手抽球强调侧身架拍、腰部转体带动发力,击球点保持在身体前方半米处,利用小臂内旋和食指挤压拍柄发力。反手抽球则…...

从德雷科风暴看关键通信网络备用电源失效与韧性加固策略

1. 从一场风暴看关键通信网络的脆弱性2012年6月底&#xff0c;一场被称为“德雷科”的强对流风暴席卷了美国中西部&#xff0c;其影响一直延伸到东海岸。这场风暴带来的不仅仅是狂风和暴雨&#xff0c;更是一次对现代基础设施&#xff0c;特别是关键通信网络的极端压力测试。风…...

AI 重构泳装产业,先智先行如何破解行业痛点

春夏季泳装市场需求旺盛&#xff0c;但多数企业深陷效率与成本双重焦虑&#xff1a;设计周期冗长、打板损耗偏高、营销内容同质化严重&#xff0c;难以快速响应潮流变化。北京先智先行科技有限公司聚焦 AI 技术赋能&#xff0c;推出 “先知大模型”“先行 AI 商学院”“先知 AI…...

边缘计算安全:保护边缘环境的安全

边缘计算安全&#xff1a;保护边缘环境的安全 一、边缘计算安全概述 1.1 边缘计算安全的定义 边缘计算安全是指保护边缘计算环境中的数据、设备和应用的安全。它包括边缘节点的安全、网络安全、数据安全和应用安全等方面。 1.2 边缘计算安全的价值 数据保护&#xff1a;保护边缘…...

NotebookLM + Hugging Face协同作战:NLP任务交付周期压缩68%的实证方法论

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM Hugging Face协同作战&#xff1a;NLP任务交付周期压缩68%的实证方法论 NotebookLM&#xff08;Google 推出的基于用户文档的AI助手&#xff09;与 Hugging Face 生态系统深度集成后&#…...

使用taotoken cli工具一键配置ubuntu开发环境中的多工具密钥

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用taotoken cli工具一键配置ubuntu开发环境中的多工具密钥 在开发环境中接入多个大模型工具时&#xff0c;手动配置每个工具的AP…...

边缘AI技术原理与实战:从模型轻量化到医疗零售场景落地

1. 项目概述&#xff1a;为什么“边缘AI”正在重塑我们的世界最近几年&#xff0c;我身边越来越多的工程师朋友&#xff0c;从云端AI的狂热转向了“边缘AI”的务实探索。这不仅仅是技术潮流的转向&#xff0c;更像是一场静悄悄的革命。简单来说&#xff0c;边缘AI就是把原本需要…...

086、Python数据压缩与归档:zipfile与tarfile实战笔记

086、Python数据压缩与归档:zipfile与tarfile实战笔记 一、从线上故障说起 上周排查一个生产环境问题:某服务每天生成的日志文件把磁盘撑满了。 查看代码发现,开发同事用 open().write() 直接写文本,一年下来积累了上千个文件。 其实这类场景最适合用压缩归档——既节省空…...