java使用枚举

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

}




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值