本文首发于 http://www.YoungZY.com/
遇到有一堆枚举值时,很容易就能想到 enum
。
比如性别(Gender),有男(Male)有女(Female),很容易就会写出下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public enum Gender { MALE("男"), FEMALE("女"); private final String display; Gender(String display) { this.display = display; } public String getDisplay() { return display; } } |
可以这样使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Student { String name; String gender; // 男女有别 public void doSomething() { Gender g = Gender.valueOf(gender); if (Gender.FEMALE == g) { // 女生啦啦队 } else if (Gender.MALE == g) { // 男生打篮球 } } } |
以上代码要想正常执行,有个前提条件,属性 gender
的值必须是 FEMALE
或者 MALE
。如果数据库中存储的是 F
和 M
呢?甚至是 1
和 2
。
这时,valueOf 方法已经不适用了。因为其参数值必须跟定义的枚举值完全一致。
针对这种情况,我想到了一个扩展。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// 接口名想了好久,不知道用什么合适 public interface CodeEnum { boolean isIt(String code); // 方法名也拿不定主意 } public enum Gender implements CodeEnum { // 用F-M还是1-2,这里可以随时调整 MALE("M", "男"), FEMALE("F", "女"); private final String display; Gender(String display) { this.display = display; } public boolean isIt(String code) { return this.code.equals(code); } public String getDisplay() { return display; } } |
这时,Student
类可以调整为:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class Student { String name; String gender; // 男女有别 public void doSomething() { if (Gender.FEMALE.isIt(gender)) { // 女生啦啦队 } else if (Gender.MALE.isIt(gender)) { // 男生打篮球 } } } |
抛砖引玉,有更好的想法欢迎留言讨论。
近期评论