0

0

Java 枚举中添加属性、方法与构造器的扩展用法

冰川箭仙

冰川箭仙

发布时间:2026-03-17 08:34:49

|

177人浏览过

|

来源于php中文网

原创

Java枚举本质是特殊的类,可定义属性、方法、构造器,实现接口并重写方法,从而承载业务逻辑;其构造器必须私有,实例在类加载时创建,支持封装查找逻辑与差异化行为,提升可读性与安全性。

java 枚举中添加属性、方法与构造器的扩展用法

Java 枚举不只是常量集合,它本质是 特殊的类,可定义属性、方法、构造器,甚至实现接口、重写方法——这使得枚举能承载业务逻辑,提升代码可读性与安全性。

定义私有属性与带参构造器

枚举常量在声明时即被实例化,因此必须通过构造器初始化。构造器必须是 private(编译器强制),且只能在枚举体首行调用。

例如,为每个枚举值关联中文描述和状态码:

public enum HttpStatus {
    OK(200, "操作成功"),
    NOT_FOUND(404, "资源未找到"),
    INTERNAL_ERROR(500, "服务器内部错误");

    private final int code;
    private final String message;

    // 私有构造器,用于初始化每个枚举实例
    HttpStatus(int code, String message) {
        this.code = code;
        this.message = message;
    }

    // 提供公共访问方法
    public int getCode() { return code; }
    public String getMessage() { return message; }
}

注意:枚举常量后括号中的参数会自动传给构造器;所有枚举实例在类加载时一次性创建完毕,不可后续 new。

立即学习Java免费学习笔记(深入)”;

NameGPT名称生成器
NameGPT名称生成器

免费AI公司名称生成器,AI在线生成企业名称,注册公司名称起名大全。

下载

添加普通方法与静态工具方法

可在枚举中定义任意实例方法(如根据 code 查找枚举)、静态方法(如解析字符串)或重写 toString()。

  • 实例方法可访问当前枚举的属性,适合封装与自身强相关的逻辑
  • 静态方法不依赖具体实例,常用于查找、转换等通用操作
  • 推荐将查找逻辑封装为静态方法,并处理 null/非法输入,避免抛出 NoSuchElementException
public enum Gender {
    MALE("男"), FEMALE("女"), OTHER("其他");

    private final String desc;

    Gender(String desc) { this.desc = desc; }

    public String getDesc() { return desc; }

    // 静态查找方法(安全版)
    public static Gender fromDesc(String desc) {
        if (desc == null) return null;
        for (Gender g : Gender.values()) {
            if (g.desc.equals(desc)) return g;
        }
        return null;
    }

    @Override
    public String toString() {
        return name() + "(" + desc + ")";
    }
}

实现接口与重写抽象方法

枚举可实现接口,也可定义抽象方法并由各常量分别实现——适用于行为差异大、但类型统一的场景(如不同支付方式的处理逻辑)。

interface PayStrategy {
    void pay(double amount);
}

public enum PaymentMethod implements PayStrategy {
    ALIPAY {
        @Override
        public void pay(double amount) {
            System.out.println("支付宝支付:" + amount + " 元");
        }
    },
    WECHAT_PAY {
        @Override
        public void pay(double amount) {
            System.out.println("微信支付:" + amount + " 元");
        }
    };

    // 抽象方法(无需显式 abstract,枚举中默认隐含)
    public abstract void pay(double amount);
}

这种方式避免了大量 if-else 或策略模式的样板代码,天然具备类型安全与可枚举性。

注意事项与最佳实践

  • 枚举类默认 final,不可被继承
  • 属性建议用 final 修饰,确保不可变性
  • 避免在枚举中持有可变状态(如缓存、连接池),易引发并发问题
  • 慎用延迟初始化(如 lazy init 字段),因枚举实例在类加载时已全部创建
  • 若逻辑过于复杂,考虑是否应拆分为独立类+策略枚举,保持枚举轻量专注

合理运用这些特性,能让枚举从“命名常量”升级为“富领域对象”,既简洁又健壮。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

255

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1153

2024.03.01

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

651

2023.11.24

chatgpt使用指南
chatgpt使用指南

本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.5万人学习

C# 教程
C# 教程

共94课时 | 11.5万人学习

Java 教程
Java 教程

共578课时 | 83.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号