今天聊聊枚举咋用

先定义一个枚举

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.ruben.enumration;

import com.alibaba.fastjson.annotation.JSONType;
import com.fasterxml.jackson.annotation.JsonFormat;

/**
* @ClassName: GenderEnum
* @Description:
* @Date: 2020/8/18 19:03
* *
* @author: achao<achao1441470436 @ gmail.com>
* @version: 1.0
* @since: JDK 1.8
*/
@JSONType(serializeEnumAsJavaBean = true)
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum GenderEnum {

FEMALE("女", 0), MALE("男", 1);

private String name;
private Integer code;

GenderEnum(String name, Integer code) {
this.name = name;
this.code = code;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getCode() {
return code;
}

public void setCode(Integer code) {
this.code = code;
}

}

然后就可以使用了

1
2
3
4
public static void main(String[] args) {
System.out.println(GenderEnum.MALE.getName()+" "+GenderEnum.MALE.getCode());
System.out.println(GenderEnum.FEMALE.getName()+" "+GenderEnum.FEMALE.getCode());
}

输出结果

男 1
女 0

有人可能会问,枚举用Validator怎么校验?

其实也很简单

比如,我们接收的参数只能限制为枚举内有的01

这时就自定义一个校验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.ruben.validator;

import com.ruben.enumration.GenderEnum;

import javax.validation.Constraint;
import javax.validation.Payload;
import javax.validation.ReportAsSingleViolation;
import javax.validation.constraints.NotNull;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
* @ClassName: Gender
* @Description:
* @Date: 2020/8/18 19:25
* *
* @author: achao<achao1441470436 @ gmail.com>
* @version: 1.0
* @since: JDK 1.8
*/
@NotNull
@Documented
@Retention(RUNTIME)
@Constraint(validatedBy = {GenderValidator.class})
@ReportAsSingleViolation
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
public @interface Gender {
String message() default "性别应该为:男1 女0";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};

GenderEnum[] value();

}

以及处理类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.ruben.validator;

import com.ruben.enumration.GenderEnum;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;

/**
* @ClassName: GenderValidator
* @Description:
* @Date: 2020/8/18 19:25
* *
* @author: achao<achao1441470436 @ gmail.com>
* @version: 1.0
* @since: JDK 1.8
*/
public class GenderValidator implements ConstraintValidator<Gender, Integer> {

private static final Set<Integer> GENDER_CONSTRAINTS = new HashSet<>();

/**
* Initializes the validator in preparation for
* calls.
* The constraint annotation for a given constraint declaration
* is passed.
* <p>
* This method is guaranteed to be called before any use of this instance for
* validation.
* <p>
* The default implementation is a no-op.
*
* @param constraintAnnotation annotation instance for a given constraint declaration
*/
@Override
public void initialize(Gender constraintAnnotation) {
GENDER_CONSTRAINTS.addAll(Arrays
.stream(constraintAnnotation.value())
.map(GenderEnum::getCode)
.collect(Collectors.toSet()));
}

/**
* Implements the validation logic.
* The state of {@code value} must not be altered.
* <p>
* This method can be accessed concurrently, thread-safety must be ensured
* by the implementation.
*
* @param value object to validate
* @param context context in which the constraint is evaluated
* @return {@code false} if {@code value} does not pass the constraint
*/
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
return GENDER_CONSTRAINTS.contains(value);
}
}

然后加上我们的注解

image-20200818193728375

image-20200818193817464

最后测试~

image-20200818194024372