聊一聊Java中的枚举和泛型(两种强大的编程特性)

聊一聊Java中的枚举和泛型(两种强大的编程特性)

在这里插入图片描述
保持热爱,奔赴山海。。。。。。

Java中的枚举

在Java中,枚举(Enum)是一种特殊的数据类型,用于定义包含固定常量集合的数据类型。枚举类型在Java中引入了更强大、更类型安全的常量集合,提高了代码的可读性和可维护性。

以下是关于Java中枚举的一些基本概念和用法:

1. 定义枚举类型

要定义一个枚举类型,可以使用 enum 关键字:

enum Days {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

2. 枚举常量

枚举常量是枚举类型的具体值。在上面的例子中,SUNDAY, MONDAY, 等就是 Days 枚举的常量。

3. 枚举方法

枚举类型可以包含方法,以便对枚举常量执行特定操作。每个枚举常量都是枚举类型的实例,并且可以有自己的属性和方法。例如:

enum Days {SUNDAY("Sun"), MONDAY("Mon"), TUESDAY("Tue"), WEDNESDAY("Wed"),THURSDAY("Thu"), FRIDAY("Fri"), SATURDAY("Sat");private String abbreviation;// 构造方法private Days(String abbreviation) {this.abbreviation = abbreviation;}// 获取缩写public String getAbbreviation() {return abbreviation;}
}

4. Switch 语句中使用枚举

枚举类型非常适合在 switch 语句中使用,使得代码更为清晰和易读:

Days day = Days.MONDAY;switch (day) {case SUNDAY:System.out.println("It's a relaxing day!");break;case MONDAY:System.out.println("Back to work!");break;// 其他枚举常量的处理...default:System.out.println("Enjoy the day!");
}

5. 枚举的遍历

可以使用 values() 方法获取枚举类型中所有的常量,并进行遍历:

for (Days day : Days.values()) {System.out.println(day);
}

6. 枚举实现接口

枚举类型也可以实现接口,为每个枚举常量提供不同的行为。

interface DayInfo {String getInfo();
}enum Days implements DayInfo {SUNDAY("Sun"), MONDAY("Mon"), TUESDAY("Tue"), WEDNESDAY("Wed"),THURSDAY("Thu"), FRIDAY("Fri"), SATURDAY("Sat");private String abbreviation;// 构造方法private Days(String abbreviation) {this.abbreviation = abbreviation;}// 获取缩写public String getAbbreviation() {return abbreviation;}// 实现接口方法@Overridepublic String getInfo() {return "This day is " + name() + " (" + getAbbreviation() + ")";}
}

这是关于Java中枚举的一些基本概念和用法。枚举是一种强大而灵活的工具,可以用于增强代码的可读性和可维护性。

Java中的泛型

Java 中的泛型是一种强大的编程特性,允许你编写可以适用于多种数据类型的通用代码,提高了代码的可重用性和类型安全性。泛型在集合类、方法和类中广泛应用,使得代码更加灵活和类型安全。

以下是一些关于 Java 泛型的基本概念和用法:

1. 泛型类

使用泛型可以创建具有通用数据类型的类。例如,下面是一个简单的泛型类:

public class Box<T> {private T value;public Box(T value) {this.value = value;}public T getValue() {return value;}
}

在这个例子中,Box 类是一个泛型类,使用 <T> 表示类型参数。通过这个参数,可以在实例化 Box 对象时指定具体的数据类型:

Box<Integer> intBox = new Box<>(42);
Box<String> strBox = new Box<>("Hello, Generics!");Integer intValue = intBox.getValue();
String strValue = strBox.getValue();

2. 泛型方法

除了泛型类,还可以在方法中使用泛型。例如,下面是一个简单的泛型方法:

public class GenericMethods {public static <T> void printArray(T[] array) {for (T element : array) {System.out.print(element + " ");}System.out.println();}
}

这个方法可以打印任意类型的数组。调用时,编译器会根据传递的参数类型进行类型推断:

Integer[] intArray = {1, 2, 3, 4, 5};
String[] strArray = {"apple", "banana", "orange"};GenericMethods.printArray(intArray);  // 输出: 1 2 3 4 5
GenericMethods.printArray(strArray);  // 输出: apple banana orange

3. 通配符

通配符是一种用于表示未知类型的符号。在泛型中,通配符通常用 ? 表示。例如,List<?> 表示一个元素类型未知的列表:

List<?> unknownList;

通配符也可以用于上界和下界。例如,List<? extends Number> 表示一个元素类型是 Number 或其子类的列表,而 List<? super Integer> 表示一个元素类型是 Integer 或其父类的列表。

4. 泛型限定

泛型可以使用限定来指定泛型的边界。通常有两种限定:上界限定和下界限定。上界限定使用 extends 关键字,下界限定使用 super 关键字。

// 上界限定:T 可以是 Number 或其子类
public <T extends Number> void processNumber(T number) {// 处理 T 类型的数据
}// 下界限定:T 可以是 Integer 或其父类
public <T super Integer> void processInteger(T number) {// 处理 T 类型的数据
}

这些是 Java 中泛型的一些基本概念和用法。泛型是一种强大的工具,可以提高代码的可读性和灵活性,并在编译时提供更好的类型检查。

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

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

相关文章

Win10 安装.NET Framework 3.5 报错0x80240438

环境&#xff1a; Win10专业版 NET Framework 3.5 问题描述&#xff1a; Win10 安装.NET Framework 3.5 报错0x80240438 解决方案&#xff1a; 1.检查自动更新服务是否未开启&#xff0c;开启自动更新失败&#xff0c;用工具开启自动更新,重启电脑&#xff08;未解决&am…

如何使用phpStudy本地快速搭建网站并内网穿透远程访问

文章目录 使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2.2 映…

C++11——包装器

该篇为lambda表达式的延申&#xff0c;请在熟知lambda表达式的基础上阅读该文章 一文详解C11lambda表达式https://blog.csdn.net/qq_74260823/article/details/134839319?spm1001.2014.3001.5501 包装器的由来 这同样是一个不属于C原始风味的语法 我们在lambda表达式中讲到过…

时间序列预测实战(二十五)PyTorch实现Seq2Seq进行多元和单元预测(附代码+数据集+完整解析)

一、本文介绍 本文给大家带来的时间序列模型是Seq2Seq&#xff0c;这个概念相信大家都不陌生了&#xff0c;网上的讲解已经满天飞了&#xff0c;但是本文给大家带来的是我在Seq2Seq思想上开发的一个模型和新的架构&#xff0c;架构前面的文章已经说过很多次了&#xff0c;其是…

MySQL数据库,函数与分组

单行函数&#xff1a; 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以嵌套 参数也可以是一列或一个值 数值函数 基本函数&#xff1a; 注&#xff1a;ROUND(x,y)函数的y是负数时&#xff0c;即往高位进行四舍五入&#xff0c;如-3就是按百位…

出生率持续下降,而低代码,成了!

低代码这个概念在IT界应该是火了很久&#xff0c;在十年前就有低代码的概念。 在最初的时候&#xff0c;我们都是用高级语言或者脚本来开发页面或者应用&#xff0c;比如Java、C&#xff0c;前端会使用Vue、React等等。但是我们发现经常写的功能或者页面都是重复的&#xff0c;…

Python实现内网穿透和端口转发代理

对于大型的爬虫项目&#xff0c;肯定需要有良好的反爬机制&#xff0c;还应该配合代理iP使用&#xff0c;只有这两种结合才能让你的爬虫更高效准确。今天我就借用我一点空闲时间&#xff0c;来谈一谈有关python爬虫网络方面的解决方案&#xff0c;这里提供内网穿透和端口转发两…

印刷企业实施数字工厂管理系统有几个步骤

随着科技的飞速发展&#xff0c;许多传统行业正面临着前所未有的挑战。印刷行业也不例外&#xff0c;尤其在面对生产效率低下&#xff0c;资源浪费严重等问题时&#xff0c;数字工厂管理系统的实施成为了必然选择。那么&#xff0c;印刷企业实施数字工厂管理系统具体有几个步骤…

echarts 柱状图 定时自动轮播(非提示框轮播)

看了很多文档都是实现提示框轮播的&#xff0c;而我要实现的功能是&#xff1a;柱状图有多条数据时&#xff0c;轮播展示其中几条&#xff0c;比如我有100条数据&#xff0c;不能全部展示&#xff0c;设置轮播5条或者10条&#xff0c;依次显示数据&#xff0c;并形成闭环。 &a…

zabbix配置snmp trap--使用snmptrapd和Bash接收器--图文教程

1.前言 我的zabbix的版本是5.0版本&#xff0c;5.0的官方文档没有使用bash接收器的示例&#xff0c;6.0的官方文档有使用bash接收器的示例&#xff0c;但是&#xff0c;下载文件的链接失效&#xff1f;&#xff01; 这里讲解zabbix-server端配置和zabbix web端配置 2.zabbix-…

11、pytest断言预期异常

官方用例 # content of test_exception_zero.py import pytestdef test_zero_division():with pytest.raises(ZeroDivisionError):1/0# content of test_exception_runtimeerror.py import pytestdef test_recursion_depth():with pytest.raises(RuntimeError) as excinfo:def…

ncnn模型部署——使用VS2019把项目打包成DLL文件

一、项目打包成DLL文件 1.创建动态链接库DLL项目 创建完成&#xff0c;项目中包含源文件dllmain.cpp, pch.cpp&#xff0c;头文件framework.h, pch.h 2.编写和配置DLL项目 &#xff08;1&#xff09;配置pch.h文件&#xff0c;在头文件pch.h中定义宏&#xff0c;宏的作用的是…

【Unity动画】Unity 2D动画创建流程

本文以2D为案例&#xff0c;讲解Unity 播放动画的流程 准备和导入2D动画资源 外部导入序列帧生成的 Unity内部制作的 外部导入的3D动画 2.创建动画过程 打开时间轴Ctrl6 选中场景中的一个未来需要播放动画的物体 回到时间轴点击Create一个新动画片段 拖动2D动画资源放入…

什么是SPA(Single Page Application)?它的优点和缺点是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

IT外包对中小企业的独特优势

在竞争激烈的商业环境中&#xff0c;企业的发展稍有缓慢&#xff0c;就很有可能被竞争对手快速赶超、趁机抢占市场。一些中小企业为了更好地应对市场变化和提高自身竞争力&#xff0c;越来越多地转向了IT外包服务。相较于大型企业&#xff0c;中小企业在选择IT外包时能够获得一…

数据结构实验任务七:基于广度优先搜索的六度空间理论验证

问题描述 “六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论 可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个&#xff0c;也就是 说&#xff0c;最多通过五个人你就能够认识任何一个陌生人。”假如给你一个社交网络图&#xf…

Tap虚拟网卡

1 概述 Tap设备通常用于虚拟化场景下&#xff0c;其驱动代码位于drivers/net/tun.c&#xff0c;tap与tun复用大部分代码&#xff0c; 注&#xff1a;drivers/net/tap.c并不是tap设备的代码&#xff0c;而是macvtap和ipvtap&#xff1b; 下文中&#xff0c;我们统一称tap&#…

四、分代垃圾回收机制及垃圾回收算法

学习垃圾回收的意义 Java 与 C等语言最大的技术区别&#xff1a;自动化的垃圾回收机制&#xff08;GC&#xff09; 为什么要了解 GC 和内存分配策略 1、面试需要 2、GC 对应用的性能是有影响的&#xff1b; 3、写代码有好处 栈&#xff1a;栈中的生命周期是跟随线程&…

Python 日志(略讲)

日志操作 日志输出&#xff1a; # 输出日志信息 logging.debug("调试级别日志") logging.info("信息级别日志") logging.warning("警告级别日志") logging.error("错误级别日志") logging.critical("严重级别日志")级别设置…

Java程序员,你掌握了多线程吗?(文末送书)

目录 01、多线程对于Java的意义02、为什么Java工程师必须掌握多线程03、Java多线程使用方式04、如何学好Java多线程送书规则 摘要&#xff1a;互联网的每一个角落&#xff0c;无论是大型电商平台的秒杀活动&#xff0c;社交平台的实时消息推送&#xff0c;还是在线视频平台的流…