聊一聊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.hqwc.cn/news/255714.html

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

相关文章

Leetcode—190.颠倒二进制位【简单】

2023每日刷题&#xff08;五十二&#xff09; Leetcode—190.颠倒二进制位 算法思路 实现代码 class Solution { public:uint32_t reverseBits(uint32_t n) {uint32_t res 0;for(int i 0; i < 32 && n > 0; i) {res | (n & 1) << (31 - i);n >&…

JavaSE语法之五:数组的定义与使用(超详解!!!)

文章目录 一、数组的概念1. 什么是数组2. 数组的创建及初始化3. 数组的使用3.1 数组中元素的访问3.2 遍历数组 二、数组是引用类型1. 初始JVM的内存分布2. 基本类型变量与引用变量的区别3. 引用变量4. 认识null 三、数组的应用场景1. 保存数据2. 作为函数的参数2.1 参数传基本类…

[TKDE2020]@Multi-Source_Spatial_Entity_Linkage

论文地址&#xff1a;https://arxiv.org/pdf/1911.09016v1.pdf&#xff08;下文中提及的引用信息如未解释&#xff0c;请索引原论文末的参考文献&#xff09; 论文中提到的SSTD2019Multi-Source Spatial Entity Linkage (提取码&#xff1a;i3xt) 论文重要部分翻译 Abstract …

Java常见算法和lambda

查找算法 public class day11 {public static void main(String[] args) {//基本查找 / 顺序差宅//核心://从0索引开始挨个往后查找//需求:定义一个方法利用基本查找 查询某个元素是否存在//数据如下:{131,127,147,81,103,23,7,79}int[] arr{131,127,147,81,103,23,7,79};int…

第二十一章——网络通信

一.网络程序设计基础 1.局域网与互联网 2.网络协议 1.IP协议 IP是Internet Protocol的简称&#xff0c;是一种网络协议。 1.1 TCP/IP层次结构 2.TCP与UDP协议 TCP可保证数据从一端送至另一端时&#xff0c;能够确实送达&#xff0c;而且抵达的数据的排列顺序和送出时的顺序相…

深眸科技以机器视觉高性能优势,为消费电子行业提供优质解决方案

机器视觉技术近年来发展迅速&#xff0c;基于计算机对图像的处理与分析&#xff0c;能够识别和辨别目标物体&#xff0c;被广泛应用于人工智能、智能制造等领域。 机器视觉凭借着高精度、高效率、灵活性和可靠性等优势&#xff0c;不断推进工业企业生产自动化和智能化进程&…

leetcode:1365. 有多少小于当前数字的数字(python3解法)

难度&#xff1a;简单 给你一个数组 nums&#xff0c;对于其中每个元素 nums[i]&#xff0c;请你统计数组中比它小的所有数字的数目。 换而言之&#xff0c;对于每个 nums[i] 你必须计算出有效的 j 的数量&#xff0c;其中 j 满足 j ! i 且 nums[j] < nums[i] 。 以数组形式…

vivado时序方法检查5

TIMING-14 &#xff1a; 时钟树上的 LUT 在时钟树上发现 LUT <cell_name> 。不建议在时钟路径上包含 LUT 单元。 描述 时钟路径上的 LUT 可能导致偏差过大 &#xff0c; 因为时钟必须在穿过互连结构的常规布线资源上进行布线。除偏差过大外 &#xff0c; 这些路径更…

【Proteus仿真】【51单片机】简易计算器

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使动态数码管、矩阵按键、蜂鸣器等。 主要功能&#xff1a; 系统运行后&#xff0c;数码管默认显示0&#xff0c;输入对应的操作数进行四则运算&#x…

华清远见嵌入式学习——QT——作业1

作业要求&#xff1a; 代码&#xff1a; ①&#xff1a;头文件 #ifndef LOGIN_H #define LOGIN_H#include <QWidget> #include <QLineEdit> //行编辑器类 #include <QPushButton> //按钮类 #include <QLabel> //标签类 #include <QM…

【C语言】程序设计加密解密

&#x1f6a9;write in front&#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博…

想要精通GO语言?这些网站是你的最佳选择!

介绍&#xff1a;Go&#xff08;又称 Golang&#xff09;是由 Google 的 Robert Griesemer&#xff0c;Rob PGo&#xff08;又称 Golang&#xff09;是由 Google 的 Robert Griesemer&#xff0c;Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。它在2009年11月10…