JAVA 枚举类的初步理解
现在Java的枚举类在真实项目中已经用的比较频繁,比静态常量更好用,也更有限定性,enum类可以用来表示有限的类对象,比如星期、月份、性别或者项目中的产品类型 像诸如此类的数量比较少可数的时候可以用枚举类型,下面我们就来看个来初步理解Java的枚举类。
package com.lcx.enum_test;
/**
*
* 性别枚举类
* @author qq1013985957
*
*/
public enum Gender {
/**
* 枚举类其实和普通类很相似,只不过枚举类只能定义可数的枚举对象,多次调用Gender.MAN返回的是同一个对象。
* 此处就是可数的枚举对象,要匹配构造器,实现抽象方法。
*/
MAN("man","男人","man people"){
@Override
public void saySelf() {
System.out.println("我是一个真正的男人啊");
}
},WOMAN("woman","女人","woman people"){
@Override
public void saySelf() {
System.out.println("我是一个真正的女人啊");
}
},GAY("gay","同性恋","gay people"){
@Override
public void saySelf() {
System.out.println("请你们尊重我们同性恋");
}
};
/**
* 模仿普通类
* 1、和普通类一样可以拥有静态成员
* 2、可以用普通成员和普通方法,但是枚举类只能拥有私有构造器,这样只能在本类中进行调用,也就是限定的枚举对象处。
* 3、也可以拥有抽象方法,那么枚举对象处必须重写抽象方法,才能实例化对象。
*/
public static final String INFO = "我是性别的枚举类";
public static void test(){
System.out.println("我是测试方法");
}
static{
System.out.println(INFO);
test();
}
//一般项目开发中,枚举类型的私有变量都都只提供get方法,枚举值设定在构造器调用的地方设置。
private String genderKind;
private String genderInfoCn;
private String genderInfoEn;
private Gender(String genderKind, String genderInfoCn, String genderInfoEn) {
this.genderKind = genderKind;
this.genderInfoCn = genderInfoCn;
this.genderInfoEn = genderInfoEn;
}
public String getGenderKind() {
return genderKind;
}
public void setGenderKind(String genderKind) {
this.genderKind = genderKind;
}
public String getGenderInfoCn() {
return genderInfoCn;
}
public void setGenderInfoCn(String genderInfoCn) {
this.genderInfoCn = genderInfoCn;
}
public String getGenderInfoEn() {
return genderInfoEn;
}
public void setGenderInfoEn(String genderInfoEn) {
this.genderInfoEn = genderInfoEn;
}
public abstract void saySelf();
}
下面我们来看下枚举对象的API
下面我来看下测试方法:
package com.lcx.enum_test;
/**
*
* 枚举测试类
*
* @author qq1013985957
*
*/
public class EnumTest {
public static void main(String[] args) {
Gender man = Gender.MAN;
Gender woman = Gender.WOMAN;
Gender gay = Gender.GAY;
//Gender.MAN = Gender.WOMAN; 此处编译报错,由于枚举对象实际上由static final修饰的
Gender man1 = Gender.MAN;
System.out.println("------------多次调用同一个枚举对象-------------");
System.out.println(man.hashCode());
System.out.println(man1.hashCode());
System.out.println("------------枚举很多时候用在switch语句中-------------");
genderDo(man);
genderDo(woman);
genderDo(gay);
System.out.println("------------根据字符串获取枚举对象,调用枚举对象的普通成员方法-------------");
Gender man_ = Gender.valueOf("MAN");
System.out.println(man_.getGenderInfoCn());
man_.setGenderInfoCn("地球上的男人");
System.out.println(man_.getGenderInfoCn());
System.out.println("------------获取所有枚举对象,并遍历-------------");
for(Gender g : Gender.values()){
g.saySelf();
}
}
/**
* 枚举很多时候用在switch语句中
* @param gender
*/
public static void genderDo(Gender gender){
switch (gender) {
case MAN:
System.out.println("男人就是应该对妻子好一点");
break;
case WOMAN:
System.out.println("女人就是应该相夫教子");
break;
case GAY:
System.out.println("同性恋也应该得到祝福");
break;
default:
break;
}
}
}
测试结果: