java枚举的使用

一个类似枚举的类 

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());
	}
打印结果:



这里定义了一个实体类Person。此类有两个参数,一个是姓名,一个是性别。当我们设置性别 person.setGender("不男不女");编译没有错的,但是“不男不女”,世间实属罕见。如果让我们在设置性别的时候只有两个选择,要么女要么男,我们就可以使用到枚举。继续代码:
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%”
枚举定义为:
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();获取所有枚举对象








  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值