1.枚举类
枚举类的理解:
类的对象只有有限个,确定的。我们称此类为枚举类
当需要定义一组常量时,强烈建议使用枚举类I
如何定义枚举类:
方式一: jdk5.0之前,自定义枚举类
方式二:jdk5.0,可以使用enum关键字定义枚举类
1.1 枚举类的主要方法
1.2 枚举类示例
我一般喜欢将一个表定义为一个枚举类,按表中字段进行类型区分
package com.yfqc.crm.enums;
import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
* @author wsw
* price_method表字段枚举类
*/
public enum PriceMethodEnum {
/**
* methodType字段 方案类型
*/
METHODTYPE_DJ("底价", 1, "methodType"),
METHODTYPE_DJBL("底价补录", 2, "methodType"),
METHODTYPE_DINGJ("定价",3,"methodType"),
METHODTYPE_TJ("调价",4,"methodType")
/**
* adjustRange字段 调价范围
*/
,ADJUSTRANGE_UNSOLDXK("未售(含销控)", 1, "adjustRange")
,ADJUSTRANGE_UNSOLDNOTXK("未售(不含销控)", 2, "adjustRange")
,ADJUSTRANGE_ALL("全部", 3, "adjustRange")
/**
* approvedState字段 审核状态
*/
,APPROVEDSTATE_AUDITPASS("审核通过", 1, "approvedState")
,APPROVEDSTATE_AUDITFAIL("审核不通过", 2, "approvedState")
,APPROVEDSTATE_REAUDITPASS("复核通过", 3, "approvedState")
,APPROVEDSTATE_REAUDITFAIL("复核不通过", 4, "approvedState")
/**
* effectiveState字段 生效状态
*/
,EFFECTIVESTATE_VALID("生效", 1, "effectiveState")
,EFFECTIVESTATE_INVALID("未生效", 2, "effectiveState")
;
/**
* 属性值
*/
private final String name;
private final Integer value;
private final String column;
/**
* 分类常量
*/
public static final String COLUMN_METHODTYPE = "methodType";
PriceMethodEnum() {
}
PriceMethodEnum(String name, Integer value, String column) {
this.name = name;
this.value = value;
this.column = column;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
public String getColumn() {
return column;
}
public void setColumn(String column) {
this.column = column;
}
/**
* 根据value获取节点枚举对象
* @param value 值
* @return
*/
public static PriceMethodEnum getNameByValueAndColumn(Integer value, String column){
PriceMethodEnum[] values = values();
for (PriceMethodEnum item : values) {
if (item.getValue().equals(value) && item.getColumn().equals(column)){
return item;
}
}
return null;
}
/**
* 根据分类获取对应的值
* @param column 分类
* @return
*/
public static List<Integer> getValuesByColumn(String column) {
PriceMethodEnum[] values = values();
List<Integer> valuesFil = new ArrayList<>(16);
for (PriceMethodEnum allEnum : values) {
if(allEnum.getColumn() != null) {
if (allEnum.getColumn().equals(column)) {
if (!StringUtils.isEmpty(allEnum.getColumn())) {
valuesFil.add(allEnum.getValue());
}
}
}
}
return valuesFil;
}
}
如何使用
2 注解
使用场景:
1 生成文档相关的注解
2 在编译时进行格式检查(JDK内置的三个基本注解)
@Override 限定重写父类方法,该注解只能用于方法
@Deprecated 用于表示所修饰元素(类,方法等)已过时
@SuppressWarnings 抑制编译器警告
当定义一个变量却未使用时,会出现警告提示
3 跟踪代码依赖性,实现替代配置文件功能
2.1 如何自定义注解
可以参照 @SuppressWarnings
新建一个注解:
使用:
可指定默认值:
使用时可以不用赋值不会报错:
2.2 元注解
元注解就是修饰注解的注解
JDK5.0提供了4个标准的meta-annotation类型,分别是:
- Target
- Retention
- Documented
- lnherited
Target:
Retention:
Documented:
2.3 可重复注解
(1) jdk1.8之前
定义一个注解:
使用:
(2) jdk1.8
2.4 类型注解
案例:修饰泛型:
使用时的类型: