枚举

无人久伴 提交于 2019-12-09 17:13:06

一、枚举

  1. jdk1.5+
  2. 使用它来汇总一些来表示同类含义的常量
  3. 枚举是引用数据类型,枚举类型的属性,赋值只能是枚举中声明过的常量
  4. 注意两个方法:name() ordinal()
  5. 使用方式

    1.在枚举中声明多个常量,用逗号分隔
    枚举作为引用数据类型,只能使用声明过的常量作为数据的值
    2.可以在枚举中声明私有属性、私有构造方法、getters/setters方法
    构造方法是私有的,只能在枚举内部使用(定义常量值时使用)
    可以将多个表示相同含义属性的不同表现形式集合到一起

二、和工具类使用的区别
1.定义一个性别工具类

package org.jgs1904.util;

/**
 * @ClassName SexUtil
 * @Description 性别工具类
 * @Author RenYuWen
 * @Since 2019/12/9 12:00
 */
public final class SexUtil {
    private SexUtil(){}
    public static final char MALE = '男';
    public static final char FEMALE = '女';
}

2.SexEnum性别枚举

package org.jgs1904.enums;

/**
 * @ClassName SexEnum
 * @Description 性别枚举
 * @Author RenYuWen
 * @Since 2019/12/9 12:07
 */
public enum SexEnum {("male", 1),("female", 2),
    其他("other", 0);

    private String enName;
    private int index;

    private SexEnum(String enName, int index){
        this.enName = enName;
        this.index = index;
    }

    public String getEnName() {
        return enName;
    }

    public void setEnName(String enName) {
        this.enName = enName;
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }
}

3.entity

学生类

package org.jgs1904.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @ClassName Student
 * @Description 学生类
 * @Author RenYuWen
 * @Since 2019/12/9 11:57
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {

    private String name;
    private int age;
    private char sex; // char类型

}

教师类

package org.jgs1904.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.jgs1904.enums.SexEnum;

/**
 * @ClassName Teacher
 * @Description TODO
 * @Author RenYuWen
 * @Since 2019/12/9 12:05
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Teacher {

    private String name;
    private int age;
    private SexEnum sex; // 枚举引用

}

4.Test

使用工具类SexUtil

@Test
    public void test01(){

        Student stu = new Student("ryw", 18, SexUtil.MALE);
        System.out.println(stu);

    }

使用性别枚举SexEnum

@Test
	public void test2() {
		
		Teacher t = new Teacher("郭老师", 18, SexEnum.);
		System.out.println(t);
		
		t.setSex(SexEnum.其他);
		System.out.println(t);
		
		SexEnum sex = t.getSex();
		System.out.println(sex);
		
		SexEnum sex1 = SexEnum.其他;
		String sexStr = sex1.toString();
		System.out.println(sexStr);
		String name = sex1.name(); // 得到枚举的名称
		System.out.println(name);
		
		int ordinal = sex1.ordinal(); // 得到枚举常量值的次序
		System.out.println(ordinal);
		
	}

使用工具类和枚举的区别在于,工具类受限于属性的类型,而枚举则不受限制。

三、Demo

public class Demo02 {

    @Test
    public void test01(){

        Student stu = new Student("ryw", 18, SexUtil.MALE);
        System.out.println(stu);

    }

    @Test
    public void test02(){

        Teacher tea = new Teacher("fang", 20, SexEnum.);
        System.out.println(tea);

        tea.setSex(SexEnum.其他);
        System.out.println(tea);

        SexEnum sex = tea.getSex();
        System.out.println(sex);

        SexEnum sexEnum = SexEnum.其他;
        String sexStr = sexEnum.toString();
        System.out.println(sexStr);

        String name = sexEnum.name(); // 得到枚举的名称
        System.out.println(name);
        int ordinal = sexEnum.ordinal(); // 得到枚举常量值的次序
        System.out.println(ordinal);
    }

    @Test
    public void test03(){
        Teacher tea = new Teacher("wu", 30, SexEnum.);

        SexEnum sex = tea.getSex();
        System.out.println(sex); // 男

        String name = sex.name();
        System.out.println(name); // 男

        int ordinal = sex.ordinal();
        System.out.println(ordinal); // 0

        String enName = sex.getEnName();
        System.out.println(enName); // male

        int index = sex.getIndex();
        System.out.println(index); // 1
    }

    @Test
    public void test04(){
        System.out.println(LoginResultEnum.SUCCESS.getContent());
    }

    @Test
    public void test05(){
        // values()
        int ordinal = 1;
        SexEnum[] sexes = SexEnum.values();
        for (SexEnum sex : sexes) {
            if (sex.ordinal() == ordinal){
                System.out.println(sex);
            }
        }

        // valueOf(String value)
        SexEnum sex = SexEnum.valueOf("男");
        System.out.println(sex);
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!