您的位置:首页 > 编程语言 > Java开发

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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息