关键词搜索

源码搜索 ×
×

java的枚举

发布2022-08-26浏览555次

详情内容

java的枚举真的很有意思。原本在C#里简简单单的事情,在JAVA里面搞得那么复杂。

下面是一个枚举定义:

package com.monkey.zjfwpt.modules.hyjj.entity;

public enum ENormal {
    FZXZ (1),ZDXM(2),CLOUD(4);

    private final int value;
    private ENormal(int value) {
        this.value = value;
    }

    public ENormal valueOf(int value) {
        switch (value) {
            case 1:
                return ENormal.FZXZ;
            case 2:
                return ENormal.ZDXM;
            default:
                return null;
        }
    }
    public int value() {
        return this.value;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

这哪是什么枚举,就是一个类啊。而且还有点莫名其妙。本来也可以最简单的:

public enum ENormal {
    FZXZ,ZDXM,CLOUD;
}
  • 1
  • 2
  • 3

之所以要像第一个例子那样写一大坨,就是为了类型转换。像本例,枚举ENormal实际上是一个整型,但在java中,不能这样写:

int en = (int)ENormal.FZXZ;
  • 1

要这样:

int en = ENormal.FZXZ.value();
  • 1

为了这个value(),就是我们写一大坨的原因。

当然啦,如果是采用最简单的方式

public enum ENormal {
    FZXZ,ZDXM,CLOUD;
}
  • 1
  • 2
  • 3

也不是不行,但我们只能通过读枚举元素下标(序号)的方式来获得整型值:

int en = ENormal.ordinal();
  • 1

从0开始吧好像。不过这样有个风险,就是万一中途插入一个新的枚举元素,岂不乱套了。

============================================
2022.08.26
java枚举里的对象,似乎天然是枚举这个类的实例,可以调用枚举类里的方法?可以利用这点来实现单例模式。单例模式可以分为饿汉模式、懒汉模式、枚举模式、双重检查锁模式,等等,等等等等,我还是头一次听说,头都大了。
参考文章:
为什么用枚举类来实现单例模式越来越流行?

public class SingletonObject7 {
    private SingletonObject7(){
    }

    /**
     * 枚举类型是线程安全的,并且只会装载一次
     */
    private enum Singleton{
        INSTANCE;

        private final SingletonObject7 instance;

        Singleton(){
            instance = new SingletonObject7();
        }

        private SingletonObject7 getInstance(){
            return instance;
        }
    }

    public static SingletonObject7 getInstance(){
	    /*
	    	自始至终,枚举类Singleton里都只是声明了一下INSTANCE,之后一直没有然后
	    	但在这里,忽然又可以通过它调用里面的getInstance
	    	我对java的语法还是不太了解
    	*/
        return Singleton.INSTANCE.getInstance();//看看 <!------------------ 
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载