先新建一个枚举类
import cn.hutool.core.util.ObjectUtil;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author: 李自强
* @description: LzqEnum
* @date: 2021/11/3 10:17 上午
*/
public enum LzqEnum {
TALL(1,"高"), RICH(2,"富"), HANDSOME(-1,"帅");
private Integer id;
private String name;
LzqEnum(Integer id,String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//通过id返回枚举,否则返回null
public static LzqEnum valueOf(Integer id) {
if (ObjectUtil.isEmpty(id)) {
return null;
}
LzqEnum[] values = LzqEnum.values();
for(LzqEnum value : values){
if(value.getId().equals(id)){
return value;
}
}
//遍历否则返回默认
return null;
}
//返回其中一个字段的list遍历,这里返回namelist
public static List<String> getNames(){
return Stream.of(LzqEnum.values())
.map(LzqEnum::getName).collect(Collectors.toList());
}
}
再新建测试类测试
import java.util.List;
/**
* @author: 李自强
* @description: EnumTest
* @date: 2021/11/3 10:17 上午
*/
public class EnumTest {
public static void main(String[] args) {
EnumTest test = new EnumTest();
test.action();
System.out.println(test.getList());
}
public List<String> getList(){
return LzqEnum.getNames();
}
public void action() {
LzqEnum test1 = LzqEnum.valueOf(2);
System.out.println("初始化返回枚举😄_" + test1);
switch (test1) {
case TALL:
System.out.println("返回高📉_" + test1);
break;
case RICH:
System.out.println("返回富💰_" + test1);
break;
case HANDSOME:
System.out.println("返回帅👴_" + test1);
break;
}
//错误写法
// LzqEnum test2 = LzqEnum.valueOf(-1);
// switch (test2) {
// case LzqEnum.HANDSOME:
// break;
// case LzqEnum.TALL:
// break;
// case LzqEnum.RICH:
// break;
// }
}
}
很多人也许会尝试写下这样的代码:
//错误写法
LzqEnum test2 = LzqEnum.valueOf(-1);
switch (test2) {
case LzqEnum.HANDSOME:
break;
case LzqEnum.TALL:
break;
case LzqEnum.RICH:
break;
}
# 这样编译不会通过,提示case后必须是一个常量
正确的写法:
LzqEnum test1 = LzqEnum.valueOf(2);
System.out.println("初始化返回枚举😄_" + test1);
switch (test1) {
case TALL:
System.out.println("返回高📉_" + test1);
break;
case RICH:
System.out.println("返回富💰_" + test1);
break;
case HANDSOME:
System.out.println("返回帅👴_" + test1);
break;
}
}
# 即在 case 后面可以直接写枚举类型,不用加枚举类的类名。
如果需要根据类型的名称返回枚举实例,可以在枚举类中加入方法
//通过id返回枚举,否则返回null
public static LzqEnum valueOf(Integer id) {
if (ObjectUtil.isEmpty(id)) {
return null;
}
LzqEnum[] values = LzqEnum.values();
for(LzqEnum value : values){
if(value.getId().equals(id)){
return value;
}
}
//遍历否则返回默认
return null;
}