java创建枚举时报错_Java枚举

在Java5以前,通常会用一组类似public static final这样的写法来表示状态码等操作来改善直接硬编码带来的可读性、可维护性,但表示内容有限,语意不明确太多时也容易乱。于是JAVA5引入枚举来实现该功能。

在Java中,被 enum 关键字修饰的类型就是枚举类型。形式如下:

enum Color { RED, GREEN, BLUE }

如果枚举不添加任何方法,枚举值默认为从0开始的有序数值。以 Color 枚举类型举例,它的枚举常量依次为RED:0,GREEN:1,BLUE:2

枚举的好处:可以将常量组织起来,统一进行管理。

枚举的典型应用场景:错误码、状态机等。

枚举类型的本质

尽管 enum 看起来像是一种新的数据类型,事实上,enum是一种受限制的类,并且具有自己的方法。

创建enum时,编译器会为你生成一个相关的类,这个类继承自 java.lang.Enum。

java.lang.Enum类声明

public abstract classEnum>

implementsComparable, Serializable { ... }

枚举的方法

在enum中,提供了一些基本方法:

values():返回enum实例的数组,而且该数组中的元素严格保持在enum中声明时的顺序。

name():返回实例名。

ordinal():返回实例声明时的次序,从0开始。

getDeclaringClass():返回实例所属的enum类型。

equals() :判断是否为同一个对象。

可以使用 == 来比较enum实例。

此外,java.lang.Enum实现了Comparable和 Serializable 接口,所以也提供 compareTo() 方法。

例:展示enum的基本方法

public classEnumMethodDemo {

enum Color {RED, GREEN, BLUE;}

enum Size {BIG, MIDDLE, SMALL;}

publicstaticvoidmain(String args[]) {

System.out.println("=========== Print all Color ===========");

for (Color c : Color.values()) {

System.out.println(c + " ordinal: " + c.ordinal());

}

System.out.println("=========== Print all Size ===========");

for (Size s : Size.values()) {

System.out.println(s + " ordinal: " + s.ordinal());

}

Color green = Color.GREEN;

System.out.println("green name(): " + green.name());

System.out.println("green getDeclaringClass(): " + green.getDeclaringClass());

System.out.println("green hashCode(): " + green.hashCode());

System.out.println("green compareTo Color.GREEN: " + green.compareTo(Color.GREEN));

System.out.println("green equals Color.GREEN: " + green.equals(Color.GREEN));

System.out.println("green equals Size.MIDDLE: " + green.equals(Size.MIDDLE));

System.out.println("green equals 1: " + green.equals(1));

System.out.format("green == Color.BLUE: %b\n", green == Color.BLUE);

}

}

输出

=========== Print all Color ===========

RED ordinal: 0

GREEN ordinal: 1

BLUE ordinal: 2

=========== Print all Size ===========

BIG ordinal: 0

MIDDLE ordinal: 1

SMALL ordinal: 2

green name(): GREEN

green getDeclaringClass(): class org.zp.javase.enumeration.EnumDemo$Color

green hashCode(): 460141958

green compareTo Color.GREEN: 0

green equals Color.GREEN: true

green equals Size.MIDDLE: false

green equals 1: false

green == Color.BLUE: false

枚举的特性

枚举的特性,归结起来就是一句话:

除了不能继承,基本上可以将 enum 看做一个常规的类。

但是这句话需要拆分去理解,让我们细细道来。

枚举可以添加方法

在概念章节提到了,枚举值默认为从0开始的有序数值 。那么问题来了:如何为枚举显示的赋值。

Java 不允许使用 = 为枚举常量赋值

如果你接触过C/C++,你肯定会很自然的想到赋值符号 = 。在C/C++语言中的enum,可以用赋值符号=显示的为枚举常量赋值;但是 ,很遗憾,Java 语法中却不允许使用赋值符号 = 为枚举常量赋值。

例:C/C++ 语言中的枚举声明

typedef enum{

ONE = 1,

TWO,

THREE = 3,

TEN = 10

} Number;

enum 可以添加普通方法、静态方法、抽象方法、构造方法

Java虽然不能直接为实例赋值,但是它有更优秀的解决方案:为 enum 添加方法来间接实现显示赋值。

创建 enum 时,可以为其添加多种方法,甚至可以为其添加构造方法。

注意一个细节:如果要为enum定义方法,那么必须在enum的最后一个实例尾部添加一个分号。此外,在enum中,必须先定义实例,不能将字段或方法定义在实例前面。否则,编译器会报错。

例:全面展示如何在枚举中定义普通方法、静态方法、抽象方法、构造方法

public enum ErrorCode {

OK(0) {

publicString getDescription() {

return "成功";

}

},

ERROR_A(100) {

publicString getDescription() {

return "错误A";

}

},

ERROR_B(200) {

publicString getDescription() {

return "错误B";

}

};

private int code;

// 构造方法:enum的构造方法只能被声明为private权限或不声明权限

privateErrorCode(intnumber) { // 构造方法

this.code = number;

}

publicintgetCode() { // 普

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随与博主沟通,第一间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值