您的位置:首页 > 编程语言 > Java开发

Java枚举enum : 简单枚举与自定义枚举的入门使用

2018-02-27 17:56 627 查看

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()方法,以便打印信息。

建议手动编写根据某个字段获取枚举值的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息