首页 > 其他分享 >枚举

枚举

时间:2024-08-13 09:05:04浏览次数:11  
标签:常量 enum 枚举 实例 类型 DataBaseType

枚举的定义:
  • 枚举是一个特殊的类,一般表示一组常量。

  • Java枚举一般用enum关键字来定义,各个常量使用逗号,来分割。

  • java枚举类型的基本写法:让类通过共有的静态final域为每个枚举常量导出一个实例,枚举类型没有可以访问的构造器,所以它是真的final类。客户端不能创建枚举类型的实例,也不能对它进行扩展,因此不存实例,而只存在声明过程的枚举常量。也就是枚举类型是实例受控的。它们是单例(Singleton)的范型化,本质上是单元素的枚举。

  • 枚举类型保证了编译时的类型安全。包含同名常量的多个枚举类型可以在一个系统中和平共处。因为每个类型都有自己的命名空间。可以新增或者重新排列枚举类型中的常量,而无需重新编译它的客户端代码。

  • 枚举类型可以添加任意的方法和域,并实现任意的接口。它们提供了所有的Object方法的高级实现,实现了Comparable和Serializable接口,并针对枚举类型的可任意改变性提供了序列化方法。

  • 枚举代码实例:

public enum Day {
    SUNDAY("星期日"),
    MONDAY("星期一"),
    TUESDAY("星期二"),
    WEDNESDAY("星期三"),
    THURSDAY("星期四"),
    FRIDAY("星期五"),
    SATURDAY("星期六");

    private final String description;

    Day(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }
}
声明枚举:

声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。枚举声明的语法如下:

enum-modifiers enum enumname:enum-base {
    enum-body,
}

[!NOTE]

任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔。

Enum类的常用方法
方法名称 描述
values() 以数组形式返回枚举类型的所有成员
valueOf() 将普通字符串转换为枚举实例
compareTo() 比较两个枚举成员在定义时的顺序
ordinal() 获取枚举成员的索引位置
EnumMap 与 EnumSet
  • EnumMap 是专门为枚举类型量身定做的 Map 实现。虽然使用其他的 Map(如 HashMap)实现也能完成枚举类型实例到值的映射,但是使用 EnumMap 会更加高效。

  • EnumSet 是枚举类型的高性能 Set 实现,它要求放入它的枚举常量必须属于同一枚举类型。EnumSet 提供了许多工厂方法以便于初始化,

  • EnumMap代码实例:

    // 定义数据库类型枚举
    public enum DataBaseType {
        MYSQUORACLE,DB2,SQLSERVER
    }
    // 某类中定义的获取数据库URL的方法以及EnumMap的声明
    private EnumMap<DataBaseType,String>urls = new EnumMap<DataBaseType,String>(DataBaseType.class);
    public DataBaseInfo() {
        urls.put(DataBaseType.DB2,"jdbc:db2://localhost:5000/sample");
        urls.put(DataBaseType.MYSQL,"jdbc:mysql://localhost/mydb");
        urls.put(DataBaseType.ORACLE,"jdbc:oracle:thin:@localhost:1521:sample");
        urls.put(DataBaseType.SQLSERVER,"jdbc:microsoft:sqlserver://sql:1433;Database=mydb");
    }
    //根据不同的数据库类型,返回对应的URL
    // @param type DataBaseType 枚举类新实例
    // @return
    public String getURL(DataBaseType type) {
        return this.urls.get(type);
    }
    
  • EnumSet 作为 Set 接口实现,它支持对包含的枚举常量的遍历:

    for(Operation op:EnumSet.range(Operation.PLUS,Operation.MULTIPLY)) {
        doSomeThing(op);
    }
    
枚举的使用场景:
  • 作为普通的常量使用,如星期、季节、颜色、城市等等;通常配合switch语句使用。

  • 往枚举中添加变量、构造函数、以达到灵活获取指定值的目的(注: Java 要求必须先定义 enum 实例,否则编译会报错);通常用于一些业务系统中定义一些固定值,如用于匹配db中的字段值等。

  • 往枚举中添加自己特定方法,以实现自己所需的相关业务逻辑。

标签:常量,enum,枚举,实例,类型,DataBaseType
From: https://www.cnblogs.com/lnnnkq/p/18356169

相关文章

  • 自学Linux第十六天:结构体 、 共用体 枚举 位运算
    结构体、共用体枚举位运算结构体结果体类型——用来描述复杂数据的一种数据类型构造类型用户自定义类型结构体描述一个结构体语法:struct:结构体类型名{成员列表}struct关键字   表示是在构造一个结构体的类型结构体名   用来描述结构体这个类型的......
  • 枚举类型enum、typede、位运算
    目录enumtypedef 位运算&与运算|或运算~取反^异或<<左移>>右移enum枚举:一个一个列举出来是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围作用:提高代码可读性、安全性枚举类型enum枚举名 {    列举各种值//枚举元素(枚举常量)};表......
  • 单例模式-饿汉、懒汉(线程安全、双重检查锁定)、静态内部类、枚举
    1饿汉式这种方式是最简单的单例模式实现,它在类加载的时候就创建了单例对象。优点实现简单线程安全缺点无论是否使用,都会加载单例类并创建单例对象publicclassSingleton{privatestaticfinalSingletonINSTANCE=newSingleton();privateSingleton(){......
  • JAVA中的枚举类
    Java中的枚举类型(Enum)在Java中,枚举(Enum)是一种特殊的类,它用于表示一组固定的常量。枚举类型在Java5(JDK1.5)中被引入,提供了一种类型安全的替代方案,用于替代传统的整型常量(如`int`类型的常量)和字符串常量(`String`)来表示一组固定的值。枚举类型具有以下特点:1.类型安全:枚举类型......
  • 枚举、typedef、位运算、堆内存-malloc 函数
    目录枚举定义枚举值枚举类型枚举的优点枚举的注意事项示例程序总结typedef基本用法复杂数据类型的重命名位运算位移操作总结堆内存malloc 函数free 函数常见问题枚举定义在C语言中,枚举(enum)是一种数据类型,它允许定义一组具名的常量。使用枚举可以使代码......
  • springboot自定义枚举转换器
    在Spring框架中,枚举类型的转换可以通过自定义的转换器来实现,这样可以方便地在请求参数、表单数据、以及数据库查询中使用枚举类型。下面是关于Spring枚举转换器的详细介绍和使用方法:以排序枚举为例1.定义枚举类BaseEnum.javapackagecom.echo.model.enums;publicinterfa......
  • 阿斯蒂芬小技巧——枚举子集时间复杂度证明
    在写状压dp时,经常会见到如下句子:for(inti=0;i<(1<<n);i++){ for(intj=i;j!=0;j=(j-1)&i){ }}时间复杂度证明如下:单个\(x\)枚举子集复杂度易证(设\(y=log_2(x)\)):\[∑_{i=0}^{y}C^i_y\]使用二项式定理:\[(a+1)^n=∑_{i=0}^{n}C_n^i~a^i\]将上面的\(a\)......
  • Java enum(枚举)
    在Java中,enum(枚举)是一种特殊的数据类型,允许你定义一组命名的常量。这些常量通常代表一个固定的、有限的集合。例如,一年中的季节、交通信号灯的状态,或者一副扑克牌的花色。基本用法一个基本的enum定义如下:publicenumSeason{WINTER,SPRING,SUMMER,FALL}这里,Season......
  • 枚举的使用场景
    枚举的使用场景目录枚举的使用场景基本定义带属性的枚举使用枚举枚举方法枚举与switch语句枚举迭代枚举与Java反射枚举实现接口枚举序列化基本定义publicenumDay{SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY;}带属性的枚举枚举可以拥有字段、......
  • `EnumSet` 和 `EnumMap` 枚举类
    EnumSet和EnumMap枚举类目录EnumSet和EnumMap枚举类EnumSet创建EnumSetEnumSet操作EnumMap创建EnumMapEnumMap操作EnumSetEnumSet是基于位向量(bitvector)的集合实现,专为枚举类型设计,提供了非常高效的内存和性能表现。EnumSet不允许包含null元素,并且所有元素都必......