8-Java枚举

本文介绍了Java中枚举的定义、使用场景,包括普通使用、带有方法和属性的枚举、重写方法、接口实现、switch用法、values/valueof方法,以及枚举与策略模式的关系。特别强调了枚举在提高代码可读性和安全性方面的优势。
摘要由CSDN通过智能技术生成

目录

一、引用的资料

二、枚举的概念

1)枚举的定义

2)为什么使用枚举

三、枚举的使用

1)普通使用

2)有方法与属性

3)重写方法与实现接口

4)swtich用法

5)values与valueof(String name)方法

6)注意事项

四、枚举与策略模式


一、引用的资料

Java 中如何使用枚举来消除 if/else_java 使用枚举优化if-CSDN博客

另外的为别人专拦不好挂链接

二、枚举的概念

1)枚举的定义

枚举是Java 1.5加入的新特性,是一种特别的操作受限的类型,与Java的class,interface,annotation同级别的类型。它需要将所有的定义在枚举类型中列出来,枚举的创建的对象全是单例的。

而在java1.6中加入了在switch中使用枚举。另外枚举是Enum的隐式子类。

2)为什么使用枚举

对于性别,有限的类别等,很多都会使用常量来定义,如下:

但是这一种在使用时,setType,放入数字,可读性差,所以一般是Entity.TEXT这样使用。但是仍然是可以用数字的,且容易越界即插入非规范好的数字。同时如果要对这个进行修改或添加也是一件很容易出问题的事。

即存在

1,可读性,易用性差等问题。上面的要可读得进入entity类里面,且要做额外的约束。

2,安全性差,很有可能插入越界的数据。如上面的插入-1,5等

3,可扩展性,可维护性差,要添加新的类型需要改变的地方多。

而用枚举可以解决上面的问题。

三、枚举的使用

1)普通使用

如下:

public enum TypeEnum {
    VIDEO,AUDIO,TEXT,IMAGE;
}

没有方法与属性。每一个定义的对象用","隔开。最后以";"结尾(如果后面没有定义方法与属性等,可以不加)。

2)有方法与属性

带方法与属性需要构建相应的构造器,因为不允许外部创建新的枚举对象。

枚举的构造器默认是private的,且只能是private的,不能明写为protected和public,但是枚举的方法与属性是可以标记为public等的,为了使用安全需要注意开放的方法与属性,防止被缀改导致问题。

public enum TypeEnum {
	VIDEO(1), AUDIO(2), TEXT(3), IMAGE(4);
	
	int value;
	
	TypeEnum(int value) {
		this.value = value;
	}
	
	public int getValue() {
		return value;
	}
}

一个使用例子:

3)重写方法与实现接口

枚举因为是Enum的隐式子类,不能再继承别的类,但是可以实现别的接口。

同时也可以重写Enum的方法,以及Object的方法。

4)swtich用法

5)values与valueof(String name)方法

values0),valueof(stringname)方法

每个枚举类都有两个static方法

static direction values():返回本类所有枚举常量(返回的是对象数组 )

static direction valueOf(String name):通过枚举常量的名字返回directon常量,注慧,这个方法与enum

类中的valueOf(String)方法的参数个数不同。

values一般用于遍历查找枚举对象。

valueof()查找单个对象,且名称必须与定义的枚举对象名一致。如:

6)注意事项

1,枚举是Enum的隐式子类,不能再额外继承别的类

2,枚举所有的构造器是private的,防止外部创建对象(枚举的特性就是有穷的对象)。

3,枚举的方法与属性是可以非private的,要注意权限的开放。

4,枚举的values与valueOf(String name)方法

四、枚举与策略模式

枚举也是一种可以实现策略模式的方式,但每添加一条策略就需要维护枚举类型并不优雅。

在spring系列的框架中,更推荐如下:

@Autowired
private Map<String, DemoService> serviceMap;

要求key必须为String的,上面的key 为Beanid,后面的为ioc管理的实例。

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值