首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java 8枚举定义使用'new‘作为枚举值

在Java中,枚举(Enum)是一种特殊的类,它代表了一组固定的常量值。枚举类型在Java 5中被引入,主要用于创建一组固定的值集合,这些值可以用于表示一组有限的选项,如星期几、月份、颜色等。

枚举定义基础概念

枚举类型通过enum关键字定义,每个枚举常量都是枚举类型的一个实例。枚举常量在枚举类型中以逗号分隔,并且通常是大写的。

代码语言:txt
复制
public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

使用'new'作为枚举值的问题

在Java中,枚举常量不能使用new关键字来创建。这是因为枚举常量是在枚举类型被加载时自动创建的,并且它们是单例的,即每个枚举常量在整个应用程序中只有一个实例。

如果你尝试使用new关键字来创建枚举常量,编译器会报错,因为这违反了枚举的设计原则。

代码语言:txt
复制
public enum Day {
    MONDAY(new Date()), // 错误示例
    TUESDAY;

    private Date date;

    Day() {
        this.date = new Date();
    }

    Day(Date date) {
        this.date = date;
    }
}

正确的做法

如果你需要在枚举常量中存储额外的信息,可以在枚举类型中定义构造函数和成员变量。但是,枚举常量本身不能使用new关键字来创建。

代码语言:txt
复制
public enum Day {
    MONDAY(new Date()),
    TUESDAY;

    private Date date;

    Day() {
        this.date = new Date();
    }

    Day(Date date) {
        this.date = date;
    }

    public Date getDate() {
        return date;
    }
}

应用场景

枚举类型在以下场景中非常有用:

  1. 状态码:表示一组固定的状态码,如HTTP状态码。
  2. 选项集合:表示一组固定的选项,如颜色、星期几等。
  3. 策略模式:使用枚举实现策略模式,每个枚举常量代表一种策略。

解决问题的方法

如果你需要在枚举常量中存储额外的信息,可以使用构造函数和成员变量。但是,不要尝试使用new关键字来创建枚举常量。

代码语言:txt
复制
public enum Day {
    MONDAY(new Date()),
    TUESDAY;

    private Date date;

    Day() {
        this.date = new Date();
    }

    Day(Date date) {
        this.date = date;
    }

    public Date getDate() {
        return date;
    }
}

通过这种方式,你可以在枚举常量中存储额外的信息,同时保持枚举类型的单例特性。

总结

  • 枚举常量不能使用new关键字来创建。
  • 枚举常量在枚举类型被加载时自动创建,并且是单例的。
  • 可以使用构造函数和成员变量在枚举常量中存储额外的信息。

希望这些信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java枚举类型enum用法(java定义枚举常量类)

文章目录 枚举类的使用 如何定义枚举类 方式一:jdk5.0之前,自定义枚举类 方式二:jdk5.0,可以使用enum关键字定义枚举类 Enum类的主要方法 toString() values() valueOf...(String objName) 使用enum关键字定义的枚举类实现接口的 情况一:实现接口,在enum类中实现抽象方法 情况二:让枚举类的对象分别实现接口中的抽象方法 枚举类的使用 枚举类的理解:类的对象只有有限个...我们称此类为枚举类 当需要定义一组常量时,强烈建议使用枚举类 如果枚举类中只有一个对象,则可以作为单例模式的实现方式。...如何定义枚举类 方式一:jdk5.0之前,自定义枚举类 //自定义枚举类 class Season{ //1.声明Season对象的属性:private final修饰 private final...enum关键字定义枚举类 使用 enum 定义的枚举类默认继承了 java.lang.Enum类,因此不能再继承其他类 枚举类的构造器只能使用 private 权限修饰符 枚举类的所有实例必须在枚举类中显式列出

3.7K20
  • Java枚举类型使用

    在编程中,常常遇到多种类型、多种状态的情况,对于这种可以事先预知的业务我们常常有两种表示方法: 使用DB管理,优点是方便在线维护,缺点是每次加载都要读取数据库,加载的性能取决于数据库的压力 。...使用枚举类型,优点是加载速度依赖于应用服务器,缺点是修改比较麻烦,每次加类型都需要发布代码。...对于Java枚举类型的使用,我们可以总结为以下几个方面:整型值,字符串字段和字符串的相关描述,下面我们就讨论如何方便的在这几个类型中相关转换,对于所有的类型转换可以总结如下: int --> Enum...String -->Enum Enum-->String Enum-->描述 int -->描述 String -->描述 下面我们对于上面的7种描述来做出对应的转换方法,首先定义一个枚举类型...: public enum EnumDemo { fail, success, unknow; } 为了能够保证相关的value和值能够保存下来

    2.2K20

    EasyC++14,枚举值的使用

    这是EasyC++系列的第14篇,咱们来聊聊C++当中的枚举值。 枚举 简介 C++当中提供了枚举操作,我们可以使用enum关键字创建枚举类型。...使用 我们定义了枚举类型之后,可以当做正常类型来进行声明: color a; 由于color是一个枚举类型,所以当我们赋值的时候,只能赋值列举出来的类型,如果附上其他的值可能会出问题。...枚举值的取值范围 前文说了,只有声明中的枚举值是有效的,然而由于C++允许使用强制转换转换成枚举值,所以理论上枚举值取值范围内的值都可以被转换成枚举值,虽然这些值在逻辑上不一定有意义。...对于枚举变量来说,它的范围并不是固定的,而是根据定义情况波动的。C++会根据枚举值声明的情况计算上限和下限,只能允许在范围内的整型值强制转化为枚举值。...所以这个枚举值的上限就是31,对于下限也会采用类似的计算,如果定义的最小值大于等于0,那么它的下限就是0,否则采取同样的算法,只不过加上负号。 之所以会如此复杂,也是为了尽可能地节省内存空间。

    58710

    Mybatis自定义枚举类处理器优雅地使用枚举

    在和前端开发对接接口过程中经常发现需要一些枚举类的字典参数,虽然可以通过swagger在线文档给前端开发,不过可以直接返回枚举的编码和字典值就可以更直观,所以在项目里怎么实现?...可以通过Mybatis的一些接口,自定义枚举类的处理器实现 环境准备 开发环境 JDK 1.8 SpringBoot2.2.1 Maven 3.2+ 开发工具 IntelliJ IDEA smartGit...i, T parameter, JdbcType jdbcType) 用于定义设置参数时把Java类型的参数转换为对应的数据库类型 T getNullableResult(ResultSet...rs, String columnName) 用于定义通过字段名称获取字段数据时把数据库类型转换为对应的Java类型 T getNullableResult(ResultSet rs, int...) 用定义调用存储过程把数据库类型转换为对应的Java类型 package com.example.springboot.mybatis.common.enumhandler; import

    1K30

    后知后觉,Java枚举值也可以作为HTTP接口传参!

    通常情况下,这些参数可能是字符串、数字或者布尔值等形式的数据,但其实,枚举值也可以作为HTTP接口传参。 首先定义一个枚举类。...这样,我们就可以在接口调用时传递枚举值,而不是字符串。 为什么枚举值可以作为HTTP接口传参呢?其原因就在于,枚举在Java中本质上也是类,它们可以被序列化为字符串。...在Spring框架中,@RequestParam会自动将字符串参数转换为对应的枚举值,前提是这些枚举值是公开的且在类中有定义。 当然,如果传参是json字符串对象,也可以按枚举值在类中的序数来传递。...status=0" 不过这种方法依赖于枚举值的顺序与序数的一致性,如果改变了枚举的顺序,可能会得到不正确的枚举值,不建议使用。 总结 使用枚举值作为HTTP接口的传参可以显著提高代码的可读性。...另外由于枚举值是预定义的,这意味着它们具有有限且确定的取值范围。如果尝试传递一个不在枚举定义中的值,编译器就会报错,从而避免了运行时错误的发生。

    18510

    java枚举类型enum的使用

    最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?...Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型。...要了解枚举类型,建议大家先打开jdk 中的Enum类简单读一下,这个类里面定义了很多protected 方法,比如构造函数,如果要使用这些方法我们可以把枚举类型定义到当前类中。...枚举类型的简单定义方法如下,我们似乎没办法定义每个枚举类型的值。...8. enum 允许程序员为eunm 实例编写方法。所以可以为每个enum 实例赋予各自不同的行为。 9. 使用enum 的职责链(Chain of Responsibility) .

    1.2K100

    java enum(枚举)使用详解 + 总结

    enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 1....EnumSet,EnumMap 的应用 7. enum 的原理分析 8....; String THU = "Thu"; String FRI = "Fri"; String SAT = "Sat"; String SUN = "Sun"; } 语法(定义) 创建枚举类型要使用...枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序...总结 可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum

    1.2K10

    JAVA枚举类型(Enum)的使用

    这个时候就体现出枚举类的作用了,java中枚举类型就是针对这样的场景需求所设计的。...,在使用的时候利用switch语句进行匹配从而得到相应的输出值,这种做法很常见。...上面的SeasonEnum 枚举类有了chinese这个成员变量,所以我们在定义实例对象时就要维护这个chinese成员变量。现在再来看看,我们是怎么使用这个枚举类简化我们的代码。...好了,关于枚举类型的初步使用就到这里了。...如果想看它更多用法请参考下面的链接 更多用法请参考这篇Java 枚举(enum) 详解7种常见的用法_请叫我大师兄_的博客-CSDN博客_java 枚举的定义与用法 版权声明:本文内容由互联网用户自发贡献

    1.3K20

    Java 枚举类型enum 的使用

    Java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?...Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型。...要了解枚举类型,建议大家先打开jdk 中的Enum 类简单读一下,这个类里面定义了很多protected 方法,比如构造函数,如果要使用这些方法我们可以把枚举类型定义到当前类中。...枚举类型的简单定义方法如下,我们似乎没办法定义每个枚举类型的值。...8.    enum 允许程序员为eunm 实例编写方法。所以可以为每个enum 实例赋予各自不同的行为。 9.    使用enum 的职责链(Chain of Responsibility) .

    1.3K91

    Java 枚举以及使用场景

    前言 在 java 编程过程中,我们通常需要定义一些固定数量的常量,在 jdk1.5 以前,通常的做法是定义一个静态常量类,但自 jdk1.5 后,java 引入了枚举(关键字 enum,全称为 enumeration...枚举 定义 使用 enum 关键字。如果枚举不添加任何方法,枚举值默认为从 0 开始的有序数值。...使用场景 1、作为普通的常量使用,如 星期、季节、颜色、城市 等等;通常配合 switch 语句使用。 2、往枚举中添加变量、构造函数、以达到灵活获取指定值的目的。...3、通常用于一些业务系统中定义一些固定值,如用于匹配数据库中的字段值等。...总结 强烈建议当你需要定义一组常量时,使用枚举类型。 尽量不要使用枚举的高级特性,事实上高级特性都可以使用普通类来实现,没有必要引入复杂性! 在项目中一般都是通过枚举来定义常量数据字典。

    1.6K20

    Java 中枚举类的使用

    在日常写项目时,很多数据字典常量都需要定义和使用,同时在 Java 面试中,枚举也是一个绕不开的话题,这篇文章就来详细介绍一下枚举的定义以及使用。 01  【什么是枚举类?】...枚举类的定义就是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内,使用枚举可以很方便地定义数据常量、以及我们的使用。 02  【为什么需要枚举类?】...(3)可以帮助我们定义所需的类型。 枚举易于记忆和使用,相当于一个接口。使用时,只需封装内部数据类型并限制数据字段。...03  【枚举类的定义和使用】 下面就定义一个试题类型的枚举类来帮助大家理解:...: valueOf():返回当前枚举类的name属性,如果没有,则throw new java.lang.IllegalArgumentException()。

    1.6K20

    java枚举自定义返回状态码

    参考链接: Java枚举 java枚举自定义返回状态码   1.设计一个接口,接口定义了状态码,消息信息以及获取方式  public interface CodeEnum {     /**     *...getCode();     /**     * 获取提示信息     * @return 提示信息     * **/     public String getMessage(); }  2.设计枚举类...,实现上述接口,定义了具体的异常信息和状态码,当有新的状态码时,只需要添加一条对应的信息即可  public enum CodeEnumEntity implements CodeEnum {    ...//自定义的状态码     DATABASE_EXCEPTION("303", "数据库连接异常"),     MONITOR_EXCEPTION("304", "文件监控异常");     //错误码...    //获取提示信息     @Override     public String getMessage() {         return message;     } }  3.测试,具体使用随意

    2.4K20
    领券