在开发过程中会遇到获取玩家性别的功能,总所周知玩家性别是有很多种的,比如unkown(即不清楚具体性别),female,male,当然有些玩家还会以girl和boy来分别。那么这么多的性别(暂且统称为性别)如何来获取相应的一个呢?难道就在代码里使用<T>==player.is<T>来判断玩家的具体性别吗?这样会有很多的冗余代码,所以想到的是使用继承了enum类的类来存储各个不同的性别,可是问题又出现了,在此类中如何做才会很简单的获取具体的性别呢?这时想到了使用一个code来代表具体的性别,比如0代表unkown,1代表female等等,以后要获取性别时直接使用getCode()方法就会得到具体相应的性别。具体代码如下:
public final class Gender extends Enum
{
//构造方法
private Gender(String s, int i, String code, String english, String pinyin, String third)
{
super(s, i);
this.code = code;
this.english = english;
this.pinyin = pinyin;
this.third = third;
}
public String getCode()
{
return code;
}
public String getEnglish()
{
return english;
}
public String getPinyin()
{
return pinyin;
}
public String getThird()
{
return third;
}
//返回符合给定code的Gender
public static Gender of(String code)
{
if(code == null || code.trim().length() == 0)
return UNKNOWN;
Gender agender[];
int j = (agender = values()).length;
for(int i = 0; i < j; i++)
{
Gender g = agender[i];
if(g.code.equals(code))
return g;
}
return UNKNOWN;
}
//进行浅拷贝
public static Gender[] values()
{
Gender agender[];
int i;
Gender agender1[];
System.arraycopy(agender = ENUM$VALUES, 0, agender1 = new Gender[i = agender.length], 0, i);
return agender1;
}
//返回s指定的Gender实例,比如s为UNKNOWN,则此方法返回UNKNOWN对应的Gender实例,即下面的new Gender("UNKNOWN", 0, "N", "unknown", "TA", "\u4ED6\uFF08\u5979\uFF09");
public static Gender valueOf(String s)
{
return (Gender)Enum.valueOf(Gender, s);
}
public static final Gender UNKNOWN;
public static final Gender FEMALE;
public static final Gender MALE;
public static final Gender BOY;
public static final Gender GIRL;
private final String code;
private final String english;
private final String pinyin;
private final String third;
private static final Gender ENUM$VALUES[];
//使用静态代码块对各个性别进行加载类时就初始化
static
{
UNKNOWN = new Gender("UNKNOWN", 0, "N", "unknown", "TA", "\u4ED6\uFF08\u5979\uFF09");//\u4ED6\uFF08\u5979\uFF09这个unicode对应的字符为他(她)
FEMALE = new Gender("FEMALE", 1, "F", "Female", "nv", "\u5979");
MALE = new Gender("MALE", 2, "M", "Male", "nan", "\u4ED6");
BOY = new Gender("BOY", 3, "B", "Boy", "nan", "\u4ED6");
GIRL = new Gender("GIRL", 4, "G", "Girl", "nv", "\u5979");
ENUM$VALUES = (new Gender[] {
UNKNOWN, FEMALE, MALE, BOY, GIRL
});
}
}
这样的话,以后就可以Gender.UNKNOWN.getCode()方法来返回具体的性别了。