一个类似枚举的类
class Gender {
private int flag;
public static Gender male = new Gender(1);
public static Gender famale = new Gender(2);
private Gender(int flag) {
this.flag = flag;
};
public String name() {
if (flag == 1) {
return "male";
} else if (flag == 2) {
return "famale";
}
return "";
}
}
此类对外公开的参数只有两个,也就是Gender对象male和famale。
什么是枚举?
枚举是相同类型的一个集合,它跟类是同等级的。
先看看下面最简单的枚举定义:
enum Gender{
male,female;
}
该枚举只有两个对象,male和female。
枚举有什么用?
简单的说,使用枚举可以避免在编译时期数据的非法录入。
此话怎么讲呢?请继续看代码。
public class Person {
/**姓名*/
private String name;
/**性别*/
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
public static void main(String[] args) {
Person person = new Person();
person.setName("张三");
person.setGender("不男不女");
System.out.println("打印:"+person.getGender());
}
打印结果:
public class Person {
/** 姓名 */
private String name;
/** 性别 */
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
//设置性别时,使用枚举
public void setGender(Gender gender) {
this.gender = gender.name();
}
}
public static void main(String[] args) {
Person person = new Person();
person.setName("张三");
//Gender.male , Gender.famale
person.setGender(Gender.male);
System.out.println("打印:"+person.getGender());
}
打印结果:
枚举的构造函数:
难道我们只能给枚举定义male或者famale吗?我非要使用枚举给gender赋值为‘男’或‘女’怎么办?这时我们可以使用枚举的构造函数。
enum Gender {
male("男"), female("女");
private String chineseGender;
private Gender(String gender) {
this.chineseGender = gender;
}
public String getChineseGender() {
return chineseGender;
}
}
值得注意的时,枚举的构造函数只能是私有的。
修改上面的setGender方法;
// 设置性别时,使用枚举
public void setGender(Gender gender) {
this.gender = gender.getChineseGender();
}
打印结果:
枚举的抽象方法:
如果还想继续往枚举对象中附加更多的信息,我们可以使用抽象方法。
比如,我非得给male和female枚举对象添加一个描述。
male的描述为“在中国,男的数量占60%”
female的描述为“在中国,女的数量占40%”
比如,我非得给male和female枚举对象添加一个描述。
male的描述为“在中国,男的数量占60%”
female的描述为“在中国,女的数量占40%”
枚举定义为:
enum Gender {
male("男") {
@Override
public String description() {
return "在中国,男的数量占60%";
}
},
female("女") {
@Override
public String description() {
return "在中国,女的数量占40%";
}
};
private String chineseGender;
private Gender(String gender) {
this.chineseGender = gender;
}
public String getChineseGender() {
return chineseGender;<pre name="code" class="java"> }
<span style="white-space:pre"> </span>// 定义一个抽象方法
public abstract String description();
}
对person类做如下修改:
public class Person {
/** 姓名 */
private String name;
/** 性别: 定义为枚举 */
private Gender gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
}
public static void main(String[] args) {
Person person = new Person();
person.setName("张三");
person.setGender(Gender.male);
System.out.println(person.getGender().getChineseGender()+":"+person.getGender().description());
}
打印结果:
枚举对象的常用方法:
int ordinal()获取枚举下标,下标从0开始
String name() 枚举名称
Enum.valueOf(Grade.class, "C");把字符串转换为枚举类型
Grade.valueOf("A");同上
Gender[] Grade.values();获取所有枚举对象
String name() 枚举名称
Enum.valueOf(Grade.class, "C");把字符串转换为枚举类型
Grade.valueOf("A");同上
Gender[] Grade.values();获取所有枚举对象