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

在 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.mzph.cn/bicheng/63823.shtml

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

相关文章

【ubuntu】将Chroma配置为LINUX服务

Chroma是一个轻量级向量数据库。既然是数据库,那么我希望它是能够长时间运行。最直接的方式是配置为service服务。 可惜官方没有去提供配置为服务的办法,而鄙人对docker又不是特别感冒。所以自己研究了下chroma配置为服务的方式。 系统:ubu…

Linux vi/vim 编辑器使用教程

Linux vi/vim 编辑器使用教程 引言 Linux 系统中的 vi 和 vim 是非常强大的文本编辑器,它们以其高效性和灵活性而闻名。vim 是 vi 的增强版,提供了更多的功能和改进的用户界面。本文将详细介绍 vi/vim 的基本用法,包括打开文件、编辑文本、…

PageHelper自定义Count查询及其优化

PageHelper自定义Count查询及其优化 文章目录 PageHelper自定义Count查询及其优化一:背景1.1、解决方法 二:利用反射判断请求参数是否有模糊查询2.1、分页不执行count2.2、思路2.3、代码示例 三:自定义COUNT查询SQL(只适用于单表)3.1、局限性…

TPAMI 2023:When Object Detection Meets Knowledge Distillation: A Survey

摘要 目标检测(Object Detection,OD)是计算机视觉中的一项关键任务,多年来涌现出了众多算法和模型。尽管当前 OD 模型的性能有所提升,但它们也变得更加复杂,由于参数规模庞大,在工业应用中并不…

ZED相机应用

下载SDK wget https://stereolabs.sfo2.cdn.digitaloceanspaces.com/zedsdk/3.6/ZED_SDK_Ubuntu18_cuda11.5_v3.6.5.run 安装 ./ZED_SDK_Ubuntu18_cuda11.5_v3.6.5.run skip_python 测试 cd /usr/local/zed/tools ls ZED_Calibration ZED_Depth_Viewer ZED_Diagnostic ZED_E…

农业园区气象站

农业园区气象站是一种专为农业生产和科研设计的气象监测设备,它集成了多种传感器和技术,用于实时、准确地监测和记录农业园区内的气象数据。以下是农业园区气象站的主要功能和用处: 一、主要功能 实时监测:农业园区气象站能够实时…

Unity3D项目为什么要使用FairyGUI

前言 Unity3D项目选择使用FairyGUI的原因是多方面的,主要涵盖性能优化、设计模式、编辑器支持、跨平台兼容性以及丰富的功能特性。以下是对这些方面的详细解析以及相关的代码实现。 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一…

编译问题 fatal error: rpc/rpc.h: No such file or directory

在编译一些第三方软件的时候,会经常遇到一些文件识别不到的问题,这里整理下做个归总。 目前可能的原因有(排序分先后): 文件不存在;文件存在但路径识别不了;…… 这次以常见的编译lmbench测试…

设计模式的艺术读书笔记

设计模式的艺术 面向对象设计原则概述单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 创建的艺术创建型模式单例模式饿汉式单例与懒汉式单例的讨论通过静态内部类实现的更好办法 简单工厂模式工厂方法模式重载的工厂方法工厂方法的隐藏工厂方…

Spring Boot中使用YAML配置文件

1. YAML 文件结构和语法 缩进与层次 YAML使用缩进来表示层级关系。每个层级的元素必须比它的父级多一个空格或Tab(推荐使用空格)。例如: server:port: 8080address: localhost 列表与映射 列表用 - 开头,映射则用 key: value…

python模拟练习第一期

问题一 如果一个数 p 是个质数,同时又是整数 a的约数,则 p 称为 a的一个质因数。 请问 2024 有多少个质因数? 步骤 1: 分解 2024 首先,2024 是偶数,说明可以被 2 整除。我们从 2 开始进行除法分解: 202…

element-plus的el-tree的双向绑定

el-tree改造了下 可选可取消 有默认值 不包含父级id&#xff08;也可打开注释 包含父级id&#xff09; 默认展开 点击节点也可触发选择 节点内容自定义 <template><div class"absolute"><el-scrollbar class"pall"><div class"…

【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(三)

目录 ARC规则 概要 所有权修饰符 __strong修饰符 __weak修饰符 __unsafe_unretained修饰符 __autoreleasing修饰符 ARC规则 概要 “引用计数式内存管理”的本质部分在ARC中并没有改变&#xff0c;ARC只是自动地帮助我们处理“引用计数”的相关部分。 在编译单位上可以…

MySQL-DQL之数据多表操作

文章目录 一. 多表操作1. 表与表之间的关系2. 外键约束3. 创建外键约束表(一对多操作) 二. 多表查询1. 多表查询① 交叉连接查询(基本不会使用-得到的是两个表的乘积) [了解]&#xff08;不要记住&#xff09;② 交集运算&#xff1a;内连接查询(join)③ 差集运算&#xff1a;外…

《经验分享 · 软考系统分析师》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

宝塔面板Linux版本常用命令

宝塔面板&#xff08;BT Panel&#xff09;是一款简单易用的服务器管理工具&#xff0c;广泛应用于Linux服务器的管理。尽管宝塔提供了图形化界面&#xff0c;但在某些情况下&#xff0c;使用命令行操作更加高效。以下是宝塔面板Linux版本常用的命令&#xff0c;包括安装、管理…

ElasticSearch - 理解doc Values与Inverted Index倒排索引

文章目录 概述倒排索引&#xff1a;从图书馆的索引卡片谈起倒排索引的工作原理 docValues&#xff1a;从数据库的列式存储说起docValues的工作原理 docValues与倒排索引的对比两者的联系&#xff1a;组合使用&#xff0c;优化搜索与分析 小结 概述 在使用 Elasticsearch 进行大…

2.【每日算法】

1. NC140 排序 题目连接 快排 #include <vector> class Solution { public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** 将给定数组排序* param arr int整型vector 待排序的数组* return int整型vector*/v…

Acer宏碁Swift3笔记本S40-20,SF314-56G原厂Win10系统工厂模式安装包,带Recovery恢复还原

适用电脑型号&#xff1a;S40-20、SF314-56、SF314-56G(原装OEM预装系统) 链接&#xff1a;https://pan.baidu.com/s/1q77Br-hcmn9iJraGVVKQ7Q?pwdrw1r 提取码&#xff1a;rw1r Acer宏碁原装出厂windows10系统自带所有驱动、Office办公软件、出厂主题壁纸、系统属性专属联…

人工智能|自然语言处理——机器翻译评价指标Bleu和Rouge

在机器翻译任务中&#xff0c;BLEU 和 ROUGE 是两个常用的评价指标&#xff0c;BLEU 根据精确率(Precision)衡量翻译的质量&#xff0c;而 ROUGE 根据召回率(Recall)衡量翻译的质量 BLEU&#xff08;Bilingual Evaluation Understudy&#xff09;&#xff1a; BLEU是一种用于评…