美文网首页
java枚举类型

java枚举类型

作者: 顺利_4364 | 来源:发表于2019-01-15 09:44 被阅读0次

一. 枚举类型的定义

  1. 定义

java.lang.Enum是在JDK1.5定义的. 定义为:


pubulic abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable{...}

  1. 编程规约:

阿里巴巴出品的编程规约

[参考]枚举类名建议带上Enum后缀, 枚举成员名称需要全大写, 单词间用下划线隔开。

说明: 枚举其实就是特殊的常量类, 且构造方法被默认和强制是私有。

正例: DealStatusEnum, 成员名称: SUCCESS/UNKOWN_REASON

二. 枚举的使用

  1. 基本使用

public enum RainBowEnum {

    RED, ORANGE, YELLEOW, GREEN, BLUE

    }

  1. 用法升级. 增加自定义方法

public enum RainBow2Enum {

    RED(0, "彩虹-红色"),

    ORANGE(1, "彩虹-橙色"),

    YELLEOW(2, "彩虹-黄色"),

    GREEN(3, "彩虹-绿色"),

    BLUE(4, "彩虹-蓝色");

    RainBow2Enum(int flag, String name) {

        this.flag = flag;

        this.name = name;

    }

    private int flag;

    private String name;

}

可以枚举实例

public enum ObjectEnum {
    OBJECT{
        @Override
        public User getUser() {
            return new User("李四", "北京西路");
        }
    },OBJECT2{
        @Override
        public User getUser() {
            return new User("小明");
        }
    };
    
    private User user;

    ObjectEnum() {
        this.user = new User();
    }
    
    public abstract User getUser() ;
}
  1. 可以实现接口, 不能继承接口. 也不能被继承. 是final的.
  2. 可以定义接口组织枚举.

/**

* @author xql132@zcsmart.com

* @date 2019/1/14 17:40

* @description

*/

public interface OrgnizeEnums {

    // 自定义水果枚举

    enum FruitEnum implements OrgnizeEnums{

        PEACH, GRAPE

    }

    // 自定义酒枚举

    enum WineEnum implements OrgnizeEnums{

        READ_WINE, SPIRIT

    }

}

class testOrgnizeEnums{

    public static void main(String[] args) {

        for (OrgnizeEnums.FruitEnum fruitEnum : OrgnizeEnums.FruitEnum.values()){

            System.out.println("fruitEnum::"+fruitEnum);

        }

        for (OrgnizeEnums.WineEnum wineEnum : OrgnizeEnums.WineEnum.values()){

            System.out.println("wineEnum::"+wineEnum);

        }

    }

}

  1. 枚举集合的使用

EnumSet的元素不允许为null, EnumSet非线程安全

EnumMap的key不允许为null,value可以为null,按照key在enum中的顺序进行保存,非线程安全。

  1. 枚举实现单例模式

经典案例

public enum SingletonEnum {
    INSTANCE;
    public void otherMethods() {
        System.out.println("Something");
    }
}

举个例子

// 枚举类
public enum DemoEnum {
    // 理解: INSTANCE是DemoEnum的实例.
    INSTANCE;

    // 定义INSTANCE包含参数User.
    private User instance;

    // 枚举类的私有构造方法. 默认是private的.
     DemoEnum() {
        instance = new User();
    }

    // 获取枚举类的具体参数user
    public User getInstance() {
        return instance;
    }

}

@Data
@Slf4j
public class User {
    private String name;
    private String address;

    public User() {
    }

    public User(String name) {
        this.name = name;
    }

    public User(String name, String address) {
        this.name = name;
        this.address = address;
    }

    public static void main(String[] args) {
        // 心得-定义 User类可以用new User();获取很多不同的实例对象. 枚举是列举出有穷序列集.
        // 定义枚举类, 里面只列举出一个值, 此值代表一个User类的实例. 通过getInstance()方法可以获取到INSTANCE的值: 一个User类的实例.
        // Enum: 自由序列化, 线程安全, 保证单例
        // Enum是由class实现的->enum作为一个类来实现单例;
        // Enum是通过继承Enum类实现的, enum不能作为子类继承其他类.也不能被继承, 是final修饰的. 但是可以用来实现接口
        // Enum有且仅有private的构造器. 防止外部的额外构造.
        User user1 = DemoEnum.INSTANCE.getInstance();
        User user2 = DemoEnum.INSTANCE.getInstance();
        User user3 = DemoEnum.INSTANCE.getInstance();
        User user4 = DemoEnum.INSTANCE.getInstance();
        log.info("获取的实例哈希值:{}", user1.hashCode());
        log.info("获取的实例哈希值:{}", user2.hashCode());
        log.info("获取的实例哈希值:{}", user3.hashCode());
        log.info("获取的实例哈希值:{}", user4.hashCode());
    }
}

三、枚举原码理解

Enum<E extends Enum<E>> 为何这样定义? 暂不理解, 以后补充。

相关文章

  • 枚举

    枚举 wiki Java的枚举类型用法介绍 深入理解Java枚举类型(enum) 为什么要用enum? 学习计划 ...

  • [Kotlin Tutorials 5] 枚举和Sealed C

    枚举和Sealed Class 枚举 首先, Kotlin和Java一样, 也是有枚举类型的: 枚举类型还可以实现...

  • Java中的枚举,这一篇全了,一些不为人知的干货

    Java枚举,也称作Java枚举类型,是一种字段由一组固定常量集合组成的类型。枚举的主要目的是加强编译时类型的安全...

  • java枚举类型

    Java中的枚举就像任何其他类一样,具有一组预定义的实例。 这里有几个例子来强调如何使用Java Enum。 1....

  • Java枚举类型

    一、枚举定义 枚举不能定义在静态方法中 一般自定义的枚举类型都属于Enum的子类型EnumType 它默认就有两个...

  • java枚举类型

    一. 枚举类型的定义 定义 java.lang.Enum是在JDK1.5定义的. 定义为: 编程规约: 阿里巴巴出...

  • Java中的枚举详解

    定义枚举 JDK1.5引入了一种新的数据类型枚举类型。Java使用关键字enum声明枚举类型,语法格式如下: en...

  • Java枚举总结

    Java枚举总结 枚举类型比较简单,下面两个文章讲的比较清楚: Java 枚举(enum) 详解7种常见的用法 深...

  • Java Enum

    Enum 类型的介绍 枚举类型是Java5新增的特性之一,枚举是一种特殊类型的类,其枚举的每一个值都是该枚举类的一...

  • Java枚举

    枚举 普通方式定义(int枚举模式) 枚举方式 Enum抽象类常见方法 Enum是所有 Java 语言枚举类型的公...

网友评论

      本文标题:java枚举类型

      本文链接:https://www.haomeiwen.com/subject/aesedqtx.html