Java 中枚举的 toString`方法及其字段信息展示

news/2024/12/12 23:12:18/文章来源:https://www.cnblogs.com/TS86/p/18603649

在 Java 编程中,枚举(enum)是一种特殊的数据类型,用于定义一组固定的常量。枚举类型不仅限于简单的常量定义,还可以包含字段、方法以及构造函数,从而使其具备更强的表达能力。toString 方法是 Java 中所有对象都继承自 Object 类的一个方法,用于返回对象的字符串表示。对于枚举类型,默认情况下,toString 方法返回的是枚举常量的名称。然而,在实际应用中,我们可能希望返回的字符串包含更多的信息,比如枚举常量的字段值。本文将详细讨论如何自定义枚举的 toString 方法以展示其字段信息,并提供一个完整且可以直接运行的代码示例。

示例一

一、理论概述

  1. 枚举的基本结构:
    • 枚举类型使用 enum 关键字定义。
    • 每个枚举常量都是该类型的一个实例。
    • 可以为枚举常量定义字段、方法和构造函数。
  2. toString 方法:
    • toString 方法是 Object 类的一个方法,默认情况下返回对象的字符串表示。
    • 对于枚举类型,默认的 toString 方法返回枚举常量的名称。
  3. 自定义 toString 方法:
    • 通过覆盖枚举的 toString 方法,可以自定义其返回的字符串表示。
    • 自定义的 toString 方法可以返回枚举常量的字段信息。

二、代码示例

下面是一个完整的代码示例,演示如何自定义枚举的 toString 方法以展示其字段信息。

// 定义一个包含字段的枚举类型
public enum Person {// 定义枚举常量,并为每个常量指定字段值ALICE("Alice", 30, "Engineer"),BOB("Bob", 25, "Designer"),CHARLIE("Charlie", 35, "Manager");// 枚举字段private String name;private int age;private String jobTitle;// 枚举构造函数,用于初始化字段Person(String name, int age, String jobTitle) {this.name = name;this.age = age;this.jobTitle = jobTitle;}// 获取名称的方法public String getName() {return name;}// 获取年龄的方法public int getAge() {return age;}// 获取职位的方法public String getJobTitle() {return jobTitle;}// 覆盖 `toString` 方法,返回包含字段信息的字符串表示@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", jobTitle='" + jobTitle + '\'' +'}';}// 主类,用于测试枚举的 `toString` 方法public static void main(String[] args) {// 遍历枚举常量,并打印其字符串表示for (Person person : Person.values()) {System.out.println(person);}}
}

三、代码解析

  1. 定义枚举类型:
    • 使用 enum 关键字定义了一个名为 Person 的枚举类型。
    • 枚举常量 ALICEBOBCHARLIE 分别被定义了,并为每个常量指定了 nameagejobTitle 字段的值。
  2. 枚举字段和构造函数:
    • 在枚举类型内部,定义了三个私有字段:nameagejobTitle
    • 定义了一个私有构造函数 Person(String name, int age, String jobTitle),用于初始化这些字段。
  3. 获取字段值的方法:
    • 定义了三个公共方法 getName()getAge()getJobTitle(),分别用于获取 nameagejobTitle 字段的值。
  4. 覆盖 toString 方法:
    • 覆盖了 Object 类的 toString 方法,返回一个包含 nameagejobTitle 字段值的字符串表示。
    • 使用字符串模板(String.format 的简化形式)来格式化返回的字符串,使其更加易读。
  5. 主类和方法:
    • 在枚举类型内部定义了一个 main 方法,用于测试枚举的 toString 方法。
    • 使用 for-each 循环遍历 Person 枚举的所有常量,并打印其字符串表示。

四、运行结果

当运行上述代码时,将输出以下结果:

Person{name='Alice', age=30, jobTitle='Engineer'}
Person{name='Bob', age=25, jobTitle='Designer'}
Person{name='Charlie', age=35, jobTitle='Manager'}

每个枚举常量的字符串表示都包含了其 nameagejobTitle 字段的值,这正是通过覆盖 toString 方法实现的。

五、实际应用和参考价值

自定义枚举的 toString 方法以展示其字段信息在实际应用中具有广泛的用途:

  • 日志记录:在日志中记录枚举常量的详细信息,有助于调试和跟踪。
  • 用户界面:在用户界面上显示枚举常量的详细信息,提高用户体验。
  • 数据交换:在数据交换格式(如 JSON、XML)中包含枚举常量的详细信息,增强数据的可读性和完整性。

通过本文的详细讨论和代码示例,读者可以了解到如何自定义枚举的 toString 方法以展示其字段信息,并在实际项目中灵活运用这一技术。这不仅能够提高代码的可读性和可维护性,还能够增强应用程序的功能和用户体验。

示例二

一、代码示例

下面是一个详细的代码示例,展示了如何自定义枚举的toString方法以包含其字段信息。这个示例将定义一个表示星期的枚举类型Day,并为每个枚举常量提供名称和对应的数字表示。然后,我们将覆盖toString方法以返回包含这些信息的字符串。

// 定义一个包含字段的枚举类型 Day
public enum Day {// 定义枚举常量,并为每个常量指定字段值MONDAY("Monday", 1),TUESDAY("Tuesday", 2),WEDNESDAY("Wednesday", 3),THURSDAY("Thursday", 4),FRIDAY("Friday", 5),SATURDAY("Saturday", 6),SUNDAY("Sunday", 7);// 枚举字段private String dayName;private int dayNumber;// 枚举构造函数,用于初始化字段Day(String dayName, int dayNumber) {this.dayName = dayName;this.dayNumber = dayNumber;}// 获取名称的方法public String getDayName() {return dayName;}// 获取数字的方法public int getDayNumber() {return dayNumber;}// 覆盖 `toString` 方法,返回包含字段信息的字符串表示@Overridepublic String toString() {return "Day{" +"dayName='" + dayName + '\'' +", dayNumber=" + dayNumber +'}';}// 主类,用于测试枚举的 `toString` 方法public static void main(String[] args) {// 遍历枚举常量,并打印其字符串表示for (Day day : Day.values()) {System.out.println(day);}}
}

二、代码解析

  1. 定义枚举类型:

    • 使用enum关键字定义了一个名为Day的枚举类型。
    • 枚举常量MONDAYTUESDAY等分别被定义了,并为每个常量指定了dayNamedayNumber字段的值。
  2. 枚举字段和构造函数:

    • 在枚举类型内部,定义了两个私有字段:dayNamedayNumber
    • 定义了一个私有构造函数Day(String dayName, int dayNumber),用于初始化这些字段。
  3. 获取字段值的方法

    • 定义了两个公共方法getDayName()getDayNumber(),分别用于获取dayNamedayNumber字段的值。
  4. 覆盖toString方法:

    • 覆盖了Object类的toString方法,返回一个包含dayNamedayNumber字段值的字符串表示。
    • 使用字符串模板(String.format的简化形式)来格式化返回的字符串,使其更加易读。
  5. 主类和方法:

    • 在枚举类型内部定义了一个main方法,用于测试枚举的toString方法。
    • 使用for-each循环遍历Day枚举的所有常量,并打印其字符串表示。

三、运行结果

当运行上述代码时,将输出以下结果:

Day{dayName='Monday', dayNumber=1}
Day{dayName='Tuesday', dayNumber=2}
Day{dayName='Wednesday', dayNumber=3}
Day{dayName='Thursday', dayNumber=4}
Day{dayName='Friday', dayNumber=5}
Day{dayName='Saturday', dayNumber=6}
Day{dayName='Sunday', dayNumber=7}

每个枚举常量的字符串表示都包含了其dayNamedayNumber字段的值,这正是通过覆盖toString方法实现的。

四、实际应用和参考价值

自定义枚举的toString方法以展示其字段信息在实际应用中具有广泛的用途。例如,在日志记录中,包含枚举常量的详细信息有助于调试和跟踪。在用户界面上,显示枚举常量的详细信息可以提高用户体验。此外,在数据交换格式(如JSON、XML)中包含枚举常量的详细信息,可以增强数据的可读性和完整性。

通过本文的详细讨论和代码示例,读者可以了解到如何自定义枚举的toString方法以展示其字段信息,并在实际项目中灵活运用这一技术。这不仅能够提高代码的可读性和可维护性,还能够增强应用程序的功能和用户体验。

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

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

相关文章

html基础-表格

表格标签的简单介绍:<table><tr><th></th><td></td></tr> </table> <!--table是表格标签 tr是行 td是每一个单元格 th是表头,有加粗剧中的功能 他们之间是需要互相嵌套 tr必须嵌套在table td和th必须签到到tr之中--> …

001 星际蜗牛 黑群晖 配置 安装

星际蜗牛 硬盘位置RAID的类型都是 Basic, 不需要做磁盘阵列。文件系统选择:ext4 ,比较稳定。NAS 结构图:系统盘:硬盘2 | 固态M2 : 32GB【系统盘】第一层:硬盘4 | 插口坏了 西数 WD1600AAJS-08PSA0 149.1GB 【大旧衰】第二层:硬盘3 | 东芝 TOSHIBA MQ01ABD050 46…

002 群晖中用VMM(Virtual Machine Manager)再虚拟安装一台群晖

安装环境:VMware Workstation Pro15虚拟黑群晖机器型号:DS3617xsDSM 版本:DSM 6.2-23739 分配内存8G如图:群晖的安装略过,需要的自行搜索大妈站内文章。1. 搜索Virtual Machine Manager(以下简称DMM)并安装设为头图套件中心中,直接搜索Virtual Machine Manager(不要搜V…

Spring Cloud 搭建 Nacos (windows )

一、Nacos服务搭建 1、下载安装: Windows: 在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码: GitHub主页:https://github.com/alibaba/nacos GitHub的Release下载页:https://github.com/alibaba/nacos/releases 解压后出现目录:说明:(默认…

一、HTML基础实例

1.HTML 文档 (1)所有 HTML 文档都必须以文档类型声明开头: 。 (2)HTML 文档以 开始,以 结束。 (3)HTML 文档的可见部分位于 和 之间。 实例: <!DOCTYPE html> <html> <body><h1>我的第一个标题</h1> <p>我的第一个段落。</…

node和rasa交互之可通信

本文主要实现node和rasa的交互,这样为后面node介入rasa奠定基础,目前实现的是node获取rasa响应后的结果,从接口访问rasa然后返回rasa的结果。涉及如何配置,训练模型,启动rasa服务器,打通路由,交互。1.2 通过node和rasa交互 1.2.1 配置 更改 config.yml # The config rec…

网络安全系统学习实验1:RDP远程登录配置

网络安全系统学习实验1:RDP远程登录配置 准备工作: 0、准备好虚拟机1、服务器侧(虚拟机Windows 2003-01)IP地址: # 获得服务器的IP地址192.168.58.223 ipconfig /all2、客户端侧(虚拟机Win7 pte_czj)IP地址: # 客户端侧IP地址192.168.58.222 ipconfig /all1、启用远程桌面…

使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南

目标检测技术作为计算机视觉领域的核心组件,在自动驾驶系统、智能监控、零售分析以及增强现实等应用中发挥着关键作用。本文将详细介绍PaliGemma2模型的微调流程,该模型通过整合SigLIP-So400m视觉编码器与Gemma 2系列的高级语言模型,专门针对目标检测任务进行了优化设计。 本…

APP 内存泄露优化

原理 https://juejin.cn/post/6864492188404088846 分析 我的APP主要的VC路径如下:如果没有内存泄露的话,我们从一个VC_A开始push一个VC_B,无论在VC_B操作了什么,pop回到VC_A,这个时候的内存大小应该和VC_A在puhs VC_B的时候是一样大的。 如图: 页面结构:曲谱列表 push 曲…

VMware ESXi 8.0U3c macOS Unlocker OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)

VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0U3 集成驱动版,在个人电脑上运行企业级工作负载 请访问原文链接:…

12.12实验八:随机森林算法实现与测试

实验八:随机森林算法实现与测试 一、实验目的 深入理解随机森林的算法原理,进而理解集成学习的意义,能够使用 Python 语言实现随机森林算法的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。二、实验内容 (1)从 scikit-learn 库中加载 iris 数据集,使用留出法…