关于java enum的真正理解
这几天头疼enum类型的使用,从网上看了挺多资料,但是都不得其解 现在整理一下:
首先enum类型名为枚举,所以一个应用场景就是代替枚举常量,一般情况下在定义枚举常量的时候往往会应用常量类去设置几个常量枚举参数,类似这样:
这就像那么一句话,老太太的裹脚布又臭又长
但是有了枚举后 我们就可以这样我们不用关心每个值大小如何,因为他一开始就给设置好了,第一个Monday被默认设置成0,之后依次累加;
但是仅仅设计enum类型就是为了去替代不好看的常量枚举么,我想Java设计者肯定不是这么傻逼
所以肯定是有其他的应用:
enum天生的类型安全,线程安全,序列化安全等等特性使得出现了这么一种应用:
使用enum去设计单例模式:
但是我在网上看的资料都是大多不解其意,先贴代码:
根据enum给的定义,我们可以把上面三个instance看成Instance类的实例,如果按此声明,意思就是代表Instance类有且仅有三个实例
下面声明的Instance类的属性及方法(此时我把enum类比成一个class,事实上这么类比也是合理的);
对于上面声明的3个实例,每一个都有自己的状态,即对于他们的name,age每个实例都是不同的!!!;
输出结果如下:
这就类似实现了一个多例模式,关于单例,只需要将上面的实例只设一个就好了:
或许大家对多例模式有所疑惑,其实多例也是很常见的,比方说打印机有好几台,但是你不能每次都通过new创建一台打印机吧,这不符合现实。
----------------------------------------------------分割线------------------------------------------------------------------