java枚举类关键字enum,是jdk1.5之后 才有的新类型。java枚举类在类加载的过程会创建自定义的枚举对象,在静态块中进行初始化,枚举适用于一个类的对象个数固定的情况。
1、如何创建一个枚举类?创建一个枚举类就和创建类的原理一样,只是class关键字换成enum关键字,比如:
public enum Light {
RED , GREEN , YELLOW ;
}
2、java枚举类的用法:
1)、常量,使用java枚举类可以替代常量,因为常量没有命名空间,使用起来不是非常清晰,如果使用java枚举类,就可以清晰地读懂代码,代码可维护性强。
2)、switch条件语句中,switch可以只用使用java枚举进行条件判断,清晰明朗。
3)、枚举类默认的构造函数实用private 修饰,可以不写,如果写了,不能用public 修饰,否则编译报错。底层用final修饰不能被继承。
4)、枚举类自带一些很实用的方法:valueOf() ,values(),等。
valueOf(); 它的作用是传来一个字符串,然后将它转变为对应的枚举变量。前提是你传的字符串和定义枚举变量的字符串一抹一样,区分大小写。如果你传了一个不存在的字符串,那么会抛出异常。
values(): 这个方法会返回包括所有枚举变量的数组。
3、具体使用:
在最近的开发中,页面上有一个 名为 正/反例的下拉框,值为,是 和否。使用的是boolean类型,按照之前的写法,下拉框固定的值都写死在页面。但是现在老大 发话了,说这样写死不利于维护,也不安全,说让写枚举类,行,枚举类就枚举类。
上代码:
先写一个返回下拉框数据的 model 类:
public class SelectBean implements Serializable{
private String seKey;
private String seValue;
public String getSeKey() {
return seKey;
}
public void setSeKey(String seKey) {
this.seKey = seKey;
}
public String getSeValue() {
return seValue;
}
public void setSeValue(String seValue) {
this.seValue = seValue;
}
}
后台 枚举类:
public enum CaseNegative {
CASENEGATIVE_ALL("","全部"),
CASENEGATIVE_JUST("0","正列"),
CASENEGATIVE_BACK("1","反列");
private String label;
private String value;
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
private CaseNegative(String label, String value) {
this.label = label;
this.value = value;
}
}
页面加载时调用 枚举类拿值的方法:
/**
* 下拉框
* @param String
* @return list
*/
@Override
public List<SelectBean> queryEnumList(ReqObject<String> data) {
SelectBean bean;
List<SelectBean> listBean = null;
listBean=new ArrayList<SelectBean>();
for(CaseNegative e: CaseNegative.values()){
bean = new SelectBean();
bean.setSeKey(e.getLabel());
bean.setSeValue(e.getValue());
listBean.add(bean);
}
}
return listBean;
}
最后:前台显示 react:
<div style={{marginRight:'10px',float:'left'}}>
<label>
正反例:
</label>
<Select id="negative" defaultValue="" onChange={this.changeIsNegative.bind(this)}
>
{optsInterfaceType}
</Select>
</div>
//render 组装数据
const {negatives,isStatus,selectedRowKeys} = this.state;
const optsInterfaceType = [];
negatives.map((item, i) => {
return optsInterfaceType.push(<Option key={item.seKey} value={item.seKey}>
{item.seValue}</Option>);
});
//调用 后台
initIsNegative = () => {
CaseAppActions.initCaseSel();
}
结果展示: