聊一聊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;
    }

    // 实现接口方法
    @Override
    public 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.mfbz.cn/a/226122.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

猫咪瘦弱的原因是什么?适合给消瘦猫咪长肉吃的猫罐头分享

很多小猫咪吃得很多&#xff0c;但是还是很瘦&#xff0c;这让很多猫主人感到困惑&#xff0c;猫咪瘦弱的原因是什么呢&#xff1f;铲屎那么多年&#xff0c;还是有点子养猫知识在身上的。那么&#xff0c;小猫咪瘦弱的原因是什么呢&#xff1f;让我们看看是不是这些原因导致的…

LinuxBasicsForHackers笔记 -- 进程管理

进程是一个正在运行和使用资源的程序。 Linux 内核是操作系统的内核&#xff0c;几乎控制着一切&#xff0c;在创建进程时&#xff0c;它会按顺序为每个进程分配一个唯一的进程 ID (PID)。 查看进程 ps – 用于在命令行查看哪些进程处于活动状态。单独使用 ps 命令并不能真正…

使用Notepad++编辑器,安装compare比较差异插件

概述 是一款非常有特色的编辑器&#xff0c;Notepad是开源软件&#xff0c;Notepad中文版可以免费使用。 操作步骤&#xff1a; 1、在工具栏 ->“插件”选项。 2、勾选Compare选项&#xff0c;点击右上角“安装”即可。 3、 确认安装插件 4、下载插件 5、插件已安装 6、打…

微前端介绍

目录 微前端概念 微前端特性 场景演示 微前端方案 iframe 方案 qiankun 方案 micro-app 方案 EMP 方案 无界微前端 方案 无界方案 成本低 速度快 原生隔离 功能强大 总结 前言&#xff1a;微前端已经是一个非常成熟的领域了&#xff0c;但开发者不管采用哪个现…

JAVA网络编程——BIO、NIO、AIO深度解析

I/O 一直是很多Java同学难以理解的一个知识点&#xff0c;这篇帖子将会从底层原理上带你理解I/O&#xff0c;让你看清I/O相关问题的本质。 1、I/O的概念 I/O 的全称是Input/Output。虽常谈及I/O&#xff0c;但想必你也一时不能给出一个完整的定义。搜索了谷哥欠&#xff0c;发…

MySQl int(1)、int(20) 的区别到底在哪里

MySQl int(1)、int(20) 的区别到底在哪里 常思一二&#xff0c;便得自然… int(1)数据类型介绍 在MySQL中&#xff0c;INT(1) 是一种定义整数类型的数据字段&#xff0c;其中的数字表示显示宽度而不是存储范围。具体说&#xff0c;INT(1) 中的数字 1 表示显示宽度&#xff0…

数字人知识库:Awesome-Talking-Head-Synthesis

数字人知识库&#xff1a;Awesome-Talking-Head-Synthesis 文章目录 数字人知识库&#xff1a;Awesome-Talking-Head-SynthesisDatasetsSurveyAudio-drivenText-drivenNeRF & 3DMetricsTools & SoftwareSlides & Presentations Gihub&#xff1a;https://github.co…

从 ByteHouse 网关,看如何进一步提升 OLAP 引擎性能

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 随着数字化转型的加速&#xff0c;企业面临着海量数据收集、处理和分析挑战。ClickHouse因其分析速度快、高性能的特点&#xff0c;被开发者广泛使用。 作为连接客户…

OPC UA客户端工具UaExpert使用

OPC UA客户端工具UaExpert使用 官方下载地址: https://www.unified-automation.com/downloads.html UaExpert 是一个全功能的 OPC UA 客户端&#xff0c;能够支持多个 OPC UA 配置文件和功能。 安装UaExpert 官方下载最新安装包: uaexpert-bin-win32-x86-vs2008sp1-v1.5.1-…

一文搞懂系列——你真的了解如何生成动态库了吗?

引言 动态库的编译&#xff0c;这有什么难度&#xff0c;这不是手到擒来的事情吗&#xff1f;无非不就是&#xff1a; gcc -FPIC -shared -o libxxx.so *.o *.c 我若是提出这些需求场景&#xff0c;阁下又如何应对呢&#xff1f; 动态库A依赖其他部分提供的能力。但是却不…

网络层(1)——概述

一、概述 网络层毫无疑问是最复杂的一层&#xff0c;涉及到大量的协议与结构的内容。在如今主流的设计中&#xff0c;大家都会把网络层分成两个部分&#xff1a;数据平面、控制平面。其中数据平面指的是网络层中每台路由器的功能&#xff0c;它决定了到达路由器端口输入链路之一…

马蹄集 oj赛(双周赛第十六次)

目录 ​圣诞树上的星星 军团大战 堆煤球 武力对决 小码哥教数学 小码哥玩字母独 跳跳棋 激光扫描游戏 数数游戏 小狗巴克 魔塔密码 地狱尖兵 3D眩晕 圣诞树上的星星 难度:青铜 时间限制: 1秒占用内存:64M 小码哥在过圣诞节! 小码哥家里有很多个星星 *&#xff0c…

热烈祝贺许战海老师成为北京湖南商会特聘专家!

在北京的初冬时节&#xff0c;一股商业的暖流在世纪华天大酒店的湖南厅中涌动。2023年12月3日下午&#xff0c;这里迎来了一场盛大的聚会——北京湖南企业商会成立20周年的预热活动之一&#xff1a;“湘商大讲堂”。这不仅是一次庆祝&#xff0c;更是一次对未来的展望&#xff…

在Pwn中,为什么时长需要栈对齐?

Index 介绍知识要点正文 介绍 在 Pwn 的学习中&#xff0c;对于初学者常常会遇到这个问题&#xff1a; 找到了溢出点&#xff0c;并且知道如何溢出&#xff0c;但是不知道为什么自己的Payload并没有成功&#xff0c;Pwntools报错EOF&#xff1a; 今天趁着有时间&#xff0c;来…

C++ 指针进阶

目录 一、字符指针 二、指针数组 三、数组指针 数组指针的定义 &数组名 与 数组名 数组指针的使用 四、数组参数 一维数组传参 二维数组传参 五、指针参数 一级指针传参 二级指针传参 六、函数指针 七、函数指针数组 八、指向函数指针数组的指针 九、回调函…

HBase 使用JDK21

HBase 使用JDK21 启动zookeeper和hadoop 创建软件目录 mkdir -p /opt/soft cd /opt/soft下载软件 wget https://dlcdn.apache.org/hbase/2.5.6/hbase-2.5.6-hadoop3-bin.tar.gz解压 hbase tar -zxvf hbase-2.5.6-hadoop3-bin.tar.gz修改 hbase 目录名称 mv hbase-2.5.6-had…

圣诞将至—C语言圣诞树代码来啦

文章目录 圣诞将至—C实现语言圣诞树源码 圣诞将至—C实现语言圣诞树 圣诞树 源码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <math.h> #include <stdlib.h> #include <windows.h> #include <time.h> #define PI 3.14159265…

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

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

论ChatGPT让程序员提升效率—掌握时代工具风口修炼之道【文末送书-02】

文章目录 一.论ChatGPT让程序员提升效率—掌握时代工具风口修炼之道二.ChatGPT在代码编写中的应用2.1 快速解决问题&#xff1a;2.2 优化代码结构&#xff1a;2.3 ChatGPT的学习过程2.4 ChatGPT的自定义训练 三.文末推荐与福利免费包邮送出4本&#xff01;3.2领书方式 一.论Cha…

java群聊聊天程序

先运行服务端&#xff0c;如果不先连接服务端&#xff0c;就不监听&#xff0c;那客户端不知道连接谁 服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class QLFWD{public static ServerSocket server_socket;public static ArrayList<S…