1.简单枚举
场景:
水果类型有苹果、橘子和香蕉。
代码:
/**
* 简单枚举
* @author hanchao
*/
enum Fruit{
APPLE,ORANGE,BANANA
}
public static void main(String[] args) throws Exception{
//测试简单枚举
LOGGER.info("测试简单枚举");
LOGGER.info("获取一个枚举值" + Fruit.APPLE.getClass().toString() + " : " + Fruit.APPLE);
//通过Fruit.values()获取枚举值数组
for (Fruit fruit : Fruit.values()) {
LOGGER.info("遍历枚举--" + fruit.getClass().toString() + " : " + fruit);
}
}
结果:
2018-02-27 17:30:42 INFO QxtMessageUtils:209 - 测试简单枚举
2018-02-27 17:30:42 INFO QxtMessageUtils:210 - 获取一个枚举值class com.sx.ldlsc.common.QxtMessageUtils$Fruit : APPLE
2018-02-27 17:30:42 INFO QxtMessageUtils:213 - 遍历枚举--class com.sx.ldlsc.common.QxtMessageUtils$Fruit : APPLE
2018-02-27 17:30:42 INFO QxtMessageUtils:213 - 遍历枚举--class com.sx.ldlsc.common.QxtMessageUtils$Fruit : ORANGE
2018-02-27 17:30:42 INFO QxtMessageUtils:213 - 遍历枚举--class com.sx.ldlsc.common.QxtMessageUtils$Fruit : BANANA
2.自定义枚举
场景:
返回值与返回消息:1代表成功,0代表经过,-1代表失败。
代码:
/**
* 自定义枚举
* @author hanchao
*/
public enum CodeAndMessage {
/**
* 设置枚举值,注意与后面的field字段对应
*/
SUCCESS(1,"成功"),
WARNING(0,"警告"),
ERROR(-1,"报错");
private int code;
private String message;
@Override
public String toString() {
return this.name() + "(" + this.code + "," + this.message + ")";
}
/**
* 根据code获取message
* @param code
* @return
*/
public static String getMessage(int code){
//通过enum.values()获取所有的枚举值
for(CodeAndMessage codeAndMessage : CodeAndMessage.values()){
//通过enum.get获取字段值
if(codeAndMessage.getCode() == code){
return codeAndMessage.message;
}
}
return null;
}
/**
* 根据code获取CodeAndMessage
* @param code
* @return
*/
public static CodeAndMessage getCodeAndMessage(int code){
for(CodeAndMessage codeAndMessage : CodeAndMessage.values()){
if(codeAndMessage.getCode() == code){
return codeAndMessage;
}
}
return null;
}
private CodeAndMessage(int code, String message) {
this.code = code;
this.message = message;
}
// setter and getter
}
public static void main(String[] args) throws Exception{
//测试自定义枚举
System.out.println();
LOGGER.info("测试自定义枚举");
LOGGER.info("获取一个枚举值" + CodeAndMessage.SUCCESS.getClass().toString() + " : " + CodeAndMessage.SUCCESS);
//通过CodeAndMessage.values()获取枚举值数组
for (CodeAndMessage codeAndMessage : CodeAndMessage.values()) {
LOGGER.info("遍历枚举--" + codeAndMessage.getClass().toString() + " : " + codeAndMessage);
}
//通过code获取message
LOGGER.info("通过code获取message: " + CodeAndMessage.getMessage(1));
//通过code获取枚举对象CodeAndMessage
LOGGER.info("通过code获取枚举对象CodeAndMessage: " + CodeAndMessage.getCodeAndMessage(-1));
//通过枚举值获取枚举对象
LOGGER.info("通过enum.valueOf(name)获取枚举对象: " + CodeAndMessage.valueOf("SUCCESS"));
LOGGER.info("通过Enum.valueOf(enumClass,name)获取枚举对象: " + Enum.valueOf(CodeAndMessage.class, "SUCCESS"));
}
结果:
2018-02-27 17:53:46 INFO QxtMessageUtils:218 - 测试自定义枚举
2018-02-27 17:53:46 INFO QxtMessageUtils:219 - 获取一个枚举值class com.sx.ldlsc.common.QxtMessageUtils$CodeAndMessage : SUCCESS(1,成功)
2018-02-27 17:53:46 INFO QxtMessageUtils:222 - 遍历枚举--class com.sx.ldlsc.common.QxtMessageUtils$CodeAndMessage : SUCCESS(1,成功)
2018-02-27 17:53:46 INFO QxtMessageUtils:222 - 遍历枚举--class com.sx.ldlsc.common.QxtMessageUtils$CodeAndMessage : WARNING(0,警告)
2018-02-27 17:53:46 INFO QxtMessageUtils:222 - 遍历枚举--class com.sx.ldlsc.common.QxtMessageUtils$CodeAndMessage : ERROR(-1,报错)
2018-02-27 17:53:46 INFO QxtMessageUtils:225 - 通过code获取message: 成功
2018-02-27 17:53:46 INFO QxtMessageUtils:227 - 通过code获取枚举对象CodeAndMessage: ERROR(-1,报错)
2018-02-27 17:53:46 INFO QxtMessageUtils:229 - 通过enum.valueOf(name)获取枚举对象: SUCCESS(1,成功)
2018-02-27 17:53:46 INFO QxtMessageUtils:230 - 通过Enum.valueOf(enumClass,name)获取枚举对象: SUCCESS(1,成功)
3.简单总结
简单枚举没有什么可说的,下面对自定义枚举进行简单总结:
- 通过enum.values()获取枚举数组。
- 通过enum.valueOf(name)获取枚举对象。
- 通过Enum.valueOf(enumClass,name)获取枚举对象。
- 设置枚举值其实调用的是全参数的构造函数。
- 建议重写toString()方法,以便打印信息。
- 建议手动编写根据某个字段获取枚举值的方法。