java使用枚举
2012-05-06 15:36
274 查看
jdk1.5增加了枚举这一类型,用enum声明。对于一特定的类型,我们可以使用枚举,如,性别,星期,等。
定义一个枚举,用enum声明,枚举列表必须写在最前面,否则编译出错,一个简单的枚举如下:
public enum Gender{
MAN,WOWEN
}
为了便于理解,我们使用 一个java类来模拟前面的枚举
public class Gender{
private Gender(){ }
public static fianl Gender MAN = new Gender();
public static fianl Gender WOWEN = new Gender();
}从上面的类,可以看出构造方法是私有的,外部无法创建对象,只提供俩个自身类型的静态常量。
这样就可以达到和枚举差不多的效果,
每个枚举如:MAN,就是一个Gender类型的实例,
其实枚举是个特殊的java类,它同样可以拥有属性和方法,甚至抽象方法,。
改一下前面的枚举
public enum Gender{
MAN,WEMEN; //也可以不使用大写,建议使用大写
private String name;//属性
public void setName(String name){
this.name = name;
}
//方法
public String getName(){
return this.name;
}
}
public class EnumTest {
public static void main(String[] args) {
Gender.MAN.setName("男");//通过setter方法赋值
System.out.println(Gender.MAN.getName()); //通过getter方法取值
//Gender.MAN能够调用setter,getter方法,就是因为Gender.MAN是Gender的实例对象。
}
}
再改一下
public enum Gender{
MAN,WEMEN("女");
private String name;
private Gender(){} //因为添加有参的构造方法,而MAN没有传参,所以要提供无参的构造方法
private Gender(String name){ //有参的构造方法 ,WEMEN("女") 就是掉用该构造方法,()里的就是参数
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
public class EnumTest {
public static void main(String[] args) {
Gender.MAN.setName("男");
System.out.println(Gender.MAN.getName());
System.out.println(Gender.WEMEN.getName()); //输出 。 女
}
}
注意,枚举的构造方法必须是private,不管是有参还是无参。
再看一下有抽象方法的枚举
public enum Gender{
MAN {
@Override
String getName() {
// TODO Auto-generated method stub
return "男";
}
},WEMEN {
@Override
String getName() {
// TODO Auto-generated method stub
return "女";
}
};
abstract String getName(); //抽象方法
}
一个枚举有抽象方法,刚才说了MAN是Gender实例对象,现在Gender有抽象方法了,那么MAN必须是Gender的实现类的实例对象。
所以MAN后面紧跟一大括号,里面实现了getName()方法。MAN后面的大括号就是个匿名内部类,也就是实现类。
枚举就是构造方法私有,其元素是自己的实例对象或实现类的实例对象,是个特殊的java类,可以有属性,方法,有,无参构造方法(构造方法必须私有的)
,抽象方法,当枚举元素只有一个时,其实就是一个单例模式。
枚举类型映射到数据库
@Entity
public class User implements Serializable{
private String username;
private String password;
private Gender gender;
@Id @Column(length=18)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(length=32,nullable=false)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
//枚举类型映射数据库的,注解EnumType.STRING 表示以字符串保存到数据库
@Enumerated(EnumType.STRING) @Column(nullable=false,length=5)
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
}
定义一个枚举,用enum声明,枚举列表必须写在最前面,否则编译出错,一个简单的枚举如下:
public enum Gender{
MAN,WOWEN
}
为了便于理解,我们使用 一个java类来模拟前面的枚举
public class Gender{
private Gender(){ }
public static fianl Gender MAN = new Gender();
public static fianl Gender WOWEN = new Gender();
}从上面的类,可以看出构造方法是私有的,外部无法创建对象,只提供俩个自身类型的静态常量。
这样就可以达到和枚举差不多的效果,
每个枚举如:MAN,就是一个Gender类型的实例,
其实枚举是个特殊的java类,它同样可以拥有属性和方法,甚至抽象方法,。
改一下前面的枚举
public enum Gender{
MAN,WEMEN; //也可以不使用大写,建议使用大写
private String name;//属性
public void setName(String name){
this.name = name;
}
//方法
public String getName(){
return this.name;
}
}
public class EnumTest {
public static void main(String[] args) {
Gender.MAN.setName("男");//通过setter方法赋值
System.out.println(Gender.MAN.getName()); //通过getter方法取值
//Gender.MAN能够调用setter,getter方法,就是因为Gender.MAN是Gender的实例对象。
}
}
再改一下
public enum Gender{
MAN,WEMEN("女");
private String name;
private Gender(){} //因为添加有参的构造方法,而MAN没有传参,所以要提供无参的构造方法
private Gender(String name){ //有参的构造方法 ,WEMEN("女") 就是掉用该构造方法,()里的就是参数
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
public class EnumTest {
public static void main(String[] args) {
Gender.MAN.setName("男");
System.out.println(Gender.MAN.getName());
System.out.println(Gender.WEMEN.getName()); //输出 。 女
}
}
注意,枚举的构造方法必须是private,不管是有参还是无参。
再看一下有抽象方法的枚举
public enum Gender{
MAN {
@Override
String getName() {
// TODO Auto-generated method stub
return "男";
}
},WEMEN {
@Override
String getName() {
// TODO Auto-generated method stub
return "女";
}
};
abstract String getName(); //抽象方法
}
一个枚举有抽象方法,刚才说了MAN是Gender实例对象,现在Gender有抽象方法了,那么MAN必须是Gender的实现类的实例对象。
所以MAN后面紧跟一大括号,里面实现了getName()方法。MAN后面的大括号就是个匿名内部类,也就是实现类。
枚举就是构造方法私有,其元素是自己的实例对象或实现类的实例对象,是个特殊的java类,可以有属性,方法,有,无参构造方法(构造方法必须私有的)
,抽象方法,当枚举元素只有一个时,其实就是一个单例模式。
枚举类型映射到数据库
@Entity
public class User implements Serializable{
private String username;
private String password;
private Gender gender;
@Id @Column(length=18)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(length=32,nullable=false)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
//枚举类型映射数据库的,注解EnumType.STRING 表示以字符串保存到数据库
@Enumerated(EnumType.STRING) @Column(nullable=false,length=5)
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
}
相关文章推荐
- Java中枚举的使用详解
- Java enum(枚举)使用方法详解
- java enum(枚举)使用详解 + 总结
- java 枚举使用详解
- Java 枚举使用方法
- java枚举的使用方法
- [改善Java代码]使用构造函数协助描述枚举项
- Java中枚举的使用
- java枚举的使用
- java enum(枚举)使用详解 + 总结
- Java枚举使用技巧
- JAVA 枚举使用详解
- java枚举使用
- JAVA enum(枚举)使用详解 + 总结
- 再谈在Java中使用枚举
- java再复习-枚举的使用及其实现原理
- Java 枚举的简单使用
- Java从零开始学二十五(枚举定义和简单使用)
- java枚举使用详解
- java enum(枚举)使用详解 + 总结