1 枚举的基本用法
枚举可以有成员方法、成员属性和构造方法。定义一个枚举:
1 | enum eType{ |
创建枚举时,$JVM$会自动创建一个继承自java.lang.Enum
的类,上面的enum
可以看做如下:
1 | enum eType extends Enum{ |
对于上面的枚举,可以看做是一个类,类名是eType
,其中A、B、C、D可以看做eType
的四个实例。但是该实例不需要手动创建,且枚举的构造方法时私有的,所有我们也不能够调用,只能有$JVM$进行调用。
由于A、B、C、D可以看做eType
的四个实例,所以可以在enum
中定义实例的变量和方法:
1 | enum eType{ |
在原有的基础上,由于enum
可以看做一个类,所以调用也是和普通的类一样,比如:
- 调用静态属性:
eType.value
,调用静态方法:eType.getValue()
- 调用非静态资源:
eType.A.getType()
。
对于枚举当中的某个实例,同样也可以为其编写自己的实例方法,比如:
1 | enum eType{ |
A后面的大括号里面的代码便是实例A的实例方法,可以通过覆盖原有的方法进行重写。同样也可以在枚举声明抽象方法,强制所有枚举中的实例实现该方法:
1 | enum eType{ |
2 枚举单例实现
1 | class Resource{ |
如果想得到单例实例可以直接使用代码Something.INSTACE.getInstance()
进行调用。解释:枚举中确保构造方法是私有的,在访问枚举实例时会执行构造方法,且每个枚举的实例都是static final
类型,也就是说该实例在$JVM$中只会被创建一次,在调用构造方法时,我们需要的单例被实例化,在枚举中的实例被保证只会被创建一次,所以我们的单例也会被保证只会创建一次。
写在最后
欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment