java中使用枚举

来源:互联网 发布:11平台登录网络错误 编辑:程序博客网 时间:2024/06/06 00:14

 jdk1.5增加了枚举这一类型,用enum声明。对于一特定的类型,我们可以使用枚举,如,性别,星期,等。

定义一个枚举,用enum声明,枚举列表必须写在最前面,否则编译出错,一个简单的枚举如下:

[java] view plaincopy
  1. public enum Gender{  
  2.       
  3.      MAN,WOWEN   
  4. }  

为了便于理解,我们使用 一个java类来模拟前面的枚举


[java] view plaincopy
  1. public class Gender{  
  2.   
  3.      private Gender(){ }  
  4.   
  5.     public static fianl Gender MAN = new Gender();  
  6.    public static fianl Gender WOWEN = new  Gender();  
  7. }  
从上面的类,可以看出构造方法是私有的,外部无法创建对象,只提供俩个自身类型的静态常量。

这样就可以达到和枚举差不多的效果,

每个枚举如:MAN,就是一个Gender类型的实例,

其实枚举是个特殊的java类,它同样可以拥有属性和方法,甚至抽象方法,。

改一下前面的枚举

[java] view plaincopy
  1. public enum Gender{  
  2.     MAN,WEMEN; //也可以不使用大写,建议使用大写  
  3.     private String name;//属性  
  4.   
  5.    public void setName(String name){  
  6.      this.name = name;  
  7.   }  
  8.   
  9. //方法  
  10.  public String getName(){  
  11.     return this.name;  
  12.  }  
  13. }  
  14.   
  15. public class EnumTest {  
  16.   
  17.   
  18.     public static void main(String[] args) {  
  19.      
  20.         Gender.MAN.setName("男");//通过setter方法赋值  
  21.   
  22.         System.out.println(Gender.MAN.getName()); //通过getter方法取值  
  23.        
  24.      //Gender.MAN能够调用setter,getter方法,就是因为Gender.MAN是Gender的实例对象。  
  25.     }  
  26.  }  

再改一下

[java] view plaincopy
  1. public enum Gender{  
  2.     MAN,WEMEN("女");  
  3.     private String name;  
  4.       
  5.     private Gender(){} //因为添加有参的构造方法,而MAN没有传参,所以要提供无参的构造方法  
  6.       
  7.     private Gender(String name){ //有参的构造方法 ,WEMEN("女") 就是掉用该构造方法,()里的就是参数  
  8.           
  9.         this.name = name;  
  10.     }  
  11.   
  12.    public void setName(String name){  
  13.      this.name = name;  
  14.   }  
  15.   
  16.  public String getName(){  
  17.     return this.name;  
  18.  }  
  19. }  
  20.   
  21. public class EnumTest {  
  22.   
  23.   
  24.     public static void main(String[] args) {  
  25.       
  26.   
  27.         Gender.MAN.setName("男");  
  28.         System.out.println(Gender.MAN.getName());  
  29.         System.out.println(Gender.WEMEN.getName()); //输出   。 女    
  30.     }  
  31. }  

注意,枚举的构造方法必须是private,不管是有参还是无参。

再看一下有抽象方法的枚举

[java] view plaincopy
  1. public enum Gender{  
  2.     MAN {  
  3.         @Override  
  4.         String getName() {  
  5.             // TODO Auto-generated method stub  
  6.             return "男";  
  7.         }  
  8.     },WEMEN {  
  9.         @Override  
  10.         String getName() {  
  11.             // TODO Auto-generated method stub  
  12.             return "女";  
  13.         }  
  14.     };  
  15.   
  16.     abstract String getName();  //抽象方法  
  17. }  

一个枚举有抽象方法,刚才说了MAN是Gender实例对象,现在Gender有抽象方法了,那么MAN必须是Gender的实现类的实例对象。

所以MAN后面紧跟一大括号,里面实现了getName()方法。MAN后面的大括号就是个匿名内部类,也就是实现类。


枚举就是构造方法私有,其元素是自己的实例对象或实现类的实例对象,是个特殊的java类,可以有属性,方法,有,无参构造方法(构造方法必须私有的)

,抽象方法,当枚举元素只有一个时,其实就是一个单例模式。


枚举类型映射到数据库

[java] view plaincopy
  1. @Entity  
  2. public class User implements Serializable{  
  3.   
  4.     private String username;  
  5.     private String password;  
  6.     private Gender gender;  
  7.   
  8.         @Id @Column(length=18)  
  9.     public String getUsername() {  
  10.         return username;  
  11.     }  
  12.     public void setUsername(String username) {  
  13.         this.username = username;  
  14.     }  
  15.     @Column(length=32,nullable=false)  
  16.     public String getPassword() {  
  17.         return password;  
  18.     }  
  19.     public void setPassword(String password) {  
  20.         this.password = password;  
  21.     }  
  22.          //枚举类型映射数据库的,注解EnumType.STRING      表示以字符串保存到数据库  
  23.         @Enumerated(EnumType.STRING) @Column(nullable=false,length=5)  
  24.     public Gender getGender() {  
  25.         return gender;  
  26.     }  
  27.     public void setGender(Gender gender) {  
  28.         this.gender = gender;  
  29.     }  
  30.   
  31. }  
本文转自:http://blog.csdn.net/zuxianghuang/article/details/7539428
原创粉丝点击