广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java中枚举的实现原理介绍
  • 769
分享到

Java中枚举的实现原理介绍

java枚举类型的实现原理 2022-11-12 21:11:51 769人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录基本概述使用方式条件选择循环遍历集合映射常用方法总结基本概述 在 jdk1.5 之前,通过定义常量使用的都是:public static fianl。而枚举的设计,就是把相关的常

基本概述

jdk1.5 之前,通过定义常量使用的都是:public static fianl。而枚举的设计,就是把相关的常量分组到一个枚举类型里,方便创建和管理。

比如我们要定义一个颜色常量:


public enum Colour {
    RED, YELLOW, BLUE, GREEN
}

这段代码通过底层编译后,实际创建了4个枚举对象:


new Enum<EnumTest>("RED", 0);
new Enum<EnumTest>("YELLOW", 1);
new Enum<EnumTest>("BLUE", 2);
new Enum<EnumTest>("GREEN", 3);

使用方式

条件选择

enum 能通过 switch 方法进行简单条件判断


Colour color = Colour.RED;
switch (color) {
    case RED:
        System.out.println("红色");
        break;
    case YELLOW:
        System.out.println("黄色");
        break;
    case GREEN:
        System.out.println("绿色");
        break;
    case BLUE:
        System.out.println("蓝色");
        break;
    default:
        System.out.println(color);
        break;
}

循环遍历

通过循环遍历 .values() 能够取到对象中的值


for (Colour e : Colour.values()) {
    System.out.println(e.toString());
}

集合映射

在我们使用枚举类型作为集合的类型或映射中的键的类型时,可以使用专门且高效的集合和映射实现。如: java.util.EnumSetjava.util.EnumMap


// EnumSet的使用
EnumSet<Colour> colorSet = EnumSet.allOf(Colour.class);
for (Colour color : colorSet) {
    System.out.println(color);
}

// EnumMap的使用
EnumMap<Colour, String> colORMap = new EnumMap(Colour.class);
colorMap.put(Colour.RED, "红色");
colorMap.put(Colour.YELLOW, "黄色");
colorMap.put(Colour.GREEN, "绿色");
colorMap.put(Colour.BLUE, "蓝色");

Set<Map.Entry<Colour, String>> colorEntries = colorMap.entrySet();
for (Map.Entry<Colour, String> entry : colorEntries) {
    System.out.println(entry.geTKEy().name() + ":" + entry.getValue());
}

常用方法

通过 java.lang.Enum 类的源码,可以探索下枚举常用的一些方法和设计思想:


// Enum 唯一的构造函数,由于 protected 修饰,所以不能调用这个构造函数。 它供编译器为响应枚举类型声明而发出的代码使用。
protected Enum(String name, int ordinal) {
    this.name = name;
    this.ordinal = ordinal;
}
```
// 返回此枚举常量的名称,与在其枚举声明中声明的完全相同。
public final String name() {
    return name;
}
```
// 返回此枚举常量的序数(它在枚举声明中的位置,其中初始常量被分配零序数)。(但大多数程序员不会使用这种方法)
public final int ordinal() {
    return ordinal;
}
```
// 与指定的对象进行比较以进行排序,当此对象小于、等于或大于指定对象时,返回一个负整数、零或正整数。且只能与相同枚举类型的其他枚举常量进行比较。 
public final int compareTo(E o) {
    Enum<?> other = (Enum<?>)o;
    Enum<E> self = this;
    if (self.getClass() != other.getClass() 
        self.getDeclarinGClass() != other.getDeclaringClass())
        throw new ClassCastException();
    return self.ordinal - other.ordinal;
}
```
// 返回与此枚举常量的枚举类型对应的 Class 对象。
public final Class<E> getDeclaringClass() {
    Class<?> clazz = getClass();
    Class<?> zuper = clazz.getSuperclass();
    return (zuper == Enum.class) ? (Class<E>)clazz : (Class<E>)zuper;
}
```

## 底层原理

`enum` 的语法结构可能对于正常的 Java 看起来怪怪的,但是通过编译器编译后产生的是一个 `.class` 文件, 可以理解枚举的语法结构是一种规范,使编译器能识别并转化为相应的类,底层实际上还是 `class` 。

```java
public class com.project.demo.Colour extends java.lang.Enum{
    public static final com.project.demo.Colour RED;
    public static final com.project.demo.Colour YELLOW;
    public static final com.project.demo.Colour BLUE;
    public static final com.project.demo.Colour GREEN;
    static {};
}

总结

所以 enum 实际上在 Java 只是一个类的形式存在,它能够更加方便的帮助我们定义常量对象,并且支持定义属性和方法,在一定程度上提高了我们的编程效率。

但是在使用时需要注意, enum 不能支持继承,应该它已经继承了包里的 java.lang.Enum 类,所以在程序设计时我们需要考虑到。

到此这篇关于Java中枚举的实现原理介绍的文章就介绍到这了,更多相关Java枚举实现原理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java中枚举的实现原理介绍

本文链接: https://www.lsjlt.com/news/159887.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中枚举的实现原理介绍
    目录基本概述使用方式条件选择循环遍历集合映射常用方法总结基本概述 在 JDK1.5 之前,通过定义常量使用的都是:public static fianl。而枚举的设计,就是把相关的常...
    99+
    2022-11-12
    java枚举类型的实现原理
  • javascript中的枚举算法实例介绍
    本篇内容介绍了“javascript中的枚举算法实例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ja...
    99+
    2022-10-19
    javascript
  • C#中的枚举类型(Enum)介绍
    枚举(Enum)定义 enum关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型。通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方...
    99+
    2022-11-13
    C# 枚举类型 Enum
  • java中枚举的原理是什么
    java中枚举的原理是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3...
    99+
    2023-06-14
  • java中枚举类型的原理是什么
    java中枚举类型的原理是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面...
    99+
    2023-06-14
  • Java实例讲解枚举enum的实现
    目录一.枚举介绍1.自定义枚举实现(1)示例(2)测试结果2.enum关键字实现枚举(1)示例(2)测试结果3.enum关键字注意事项(1)示例一.枚举介绍 1.枚举是一组常量的集合...
    99+
    2022-11-13
    Java 枚举 Java enum
  • Go iota关键字与枚举类型实现原理
    目录1. iota关键字2. 枚举类型1. iota关键字 iota是go语言的常量计数器,只能在常量的表达式中使用,其值从0开始,在const中每新增一行iota自己增长1,其值一...
    99+
    2022-11-11
    Go iota关键字 Go枚举类型实现
  • Docker exec 的实现原理介绍
    我使用了 docker exec 命令进入到了容器当中。在了解了Linux Namespace 的隔离机制后,你应该会很自然地想到一个问题:docker exec 是怎么做到进入容器...
    99+
    2022-11-13
    Docker exec 实现原理 Docker exec 的实现
  • springboot+mybatis+枚举处理器的实现
    目录背景现状期望实现通用的枚举接口mybaits枚举处理器配置枚举处理器包含枚举类型字段的实体类查询mapper背景 在Spring boot项目开发中经常遇到需要使用枚举的场景,比...
    99+
    2022-11-13
    springboot mybatis 枚举处理器 springboot mybatis 枚举
  • Python中的枚举怎么实现
    这篇文章主要介绍了Python中的枚举怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中的枚举怎么实现文章都会有所收获,下面我们一起来看看吧。使用普通类直接实现枚举在Python中,枚举和我们...
    99+
    2023-07-05
  • java中枚举如何实现单例模式
    java中枚举实现单例模式的方法:可以使用单元素枚举类型实现,语法格式:“public enum Singleton {INSTANCE; private Singleton() {}}”,一般情况下枚举里面创建实例是线程安全的。用法说明:...
    99+
    2022-10-24
    Java
  • Vue指令的实现原理介绍
    这篇文章主要介绍“Vue指令的实现原理介绍”,在日常操作中,相信很多人在Vue指令的实现原理介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue指令的实现原理介绍”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-20
  • Java GC的工作原理介绍
    本篇内容主要讲解“Java GC的工作原理介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java GC的工作原理介绍”吧!JVM内存结构由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示...
    99+
    2023-06-17
  • 怎么在java中使用枚举实现单例
    怎么在java中使用枚举实现单例?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. ...
    99+
    2023-06-14
  • PythonCountingBloomFilter原理与实现详细介绍
    目录前言原理一、BF 为什么不支持删除二、什么是 Counting Bloom Filter三、Counter 大小的选择简单的实现总结前言 标准的 Bloom Filter 是一种...
    99+
    2022-11-11
    Python Counting Bloom Filter Python Bloom Filter
  • Java反射机制的原理介绍
    这篇文章主要介绍“Java反射机制的原理介绍”,在日常操作中,相信很多人在Java反射机制的原理介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java反射机制的原理介绍”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-17
  • Java通过值查找对应的枚举的实现
    目录一、背景二、通过一个值 ,查询返回对应的枚举(示例代码)2.1、枚举类2.2、常用的枚举方法;values(), ordinal() 和 valueOf() 方法2.3、通过传入...
    99+
    2022-11-13
    Java 值查找对应的枚举 Java 值查找枚举
  • Redis分布式锁的实现原理介绍
    这篇文章主要讲解了“Redis分布式锁的实现原理介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis分布式锁的实现原理介绍”吧!一、写在前面现在面试,一般都会聊聊分布式系统这块的东西...
    99+
    2023-06-02
  • Java SpringBoot在RequestBody中高效的使用枚举参数原理案例详解
    在优雅的使用枚举参数(原理篇)中我们聊过,Spring对于不同的参数形式,会采用不同的处理类处理参数,这种形式,有些类似于策略模式。将针对不同参数形式的处理逻辑,拆分到不同处理类中,...
    99+
    2022-11-12
    Java SpringBoot在RequestBody中使用枚举参数 Java SpringBoot在RequestBody中使用枚举参数详解
  • python pow函数的底层实现原理介绍
    一、最朴素的方法和pow比较 python中求两个a的b次方,常见的方法有:pow(a,b),a**b。那么这两个是否有区别,而且他们底层是怎么实现的呢? 最容易想到的方法就是:循环...
    99+
    2022-11-11
    python pow函数 底层实现
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作